闪电龟龟--笔记

万物寻其根,通其堵,便能解其困。
随笔 - 169, 文章 - 0, 评论 - 1, 阅读 - 79596
  博客园  :: 新随笔  :: 管理

NSIS 打包操作

Posted on   闪电龟龟  阅读(581)  评论(0编辑  收藏  举报

1.文档(案例)笔记:

AddBy 2020-09-11

具体学习可参考下列网址:

可参考网址:http://blog.sina.com.cn/s/blog_6cd65f450101cr0p.html

可参考网址:https://www.cnblogs.com/carlxb/p/12746523.html

可参考网址:https://www.cnblogs.com/zzllily/articles/5445934.html

复制代码
; Script generated by the HM NIS Edit Script Wizard.
; 可参考网址:http://blog.sina.com.cn/s/blog_6cd65f450101cr0p.html
;可参考网址:https://www.cnblogs.com/carlxb/p/12746523.html
;可参考网址:https://www.cnblogs.com/zzllily/articles/5445934.html

; 使用defined定义常量
;!define PRODUCT_NAME "ReadPassTrain" ;产品名称
;!define PRODUCT_VERSION "1.0"  ; 产品版本号
;!define PRODUCT_PUBLISHER "namejr"  ;  产品发布者
;!define PRODUCT_WEB_SITE ""  ; 网址
;!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\testapp.exe"  ; 添加注册表
;!define PRODUCT_REGKEY "Software\testapp"  ; 创建程序主键
;!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"  ;这里定义的变量,最后会显示在控制面板的添加/删除程序的列表里。
;!define PRODUCT_UNINST_ROOT_KEY "HKLM"  ; 卸载目录



; MUI 1.67 compatible ------
;!include "MUI.nsh"  ; 引用界面函数库

; MUI Settings
;!define MUI_ABORTWARNING  ;未安装完成是用户提示
;!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"  // 定义安装图标
;!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"  // 卸载图标
;!define MUI_HEADERIMAGE  // 标题图标
;!define MUI_HEADERINAGE_RIGHT  // 标题图标所放的位置,_right表示右
;!define MUI_HEADERIMAGE_BITMAP "标题图片"  // 添加标题图片
;!define MUI_WELCOMEPAGE_TITLE "欢迎使用“产品”安装向导"  // 添加界面导向标题
;!define MUI_WELCOMEPAGE_TEXT "\r\n这个安装向导将指引你完成“产品”的安装进程。\r\n\r\n开始安装前,建议先关闭其他所有应用程序。\r\n\r\n$_CLICK"  // 添加界面导向文字


; 语言选择框
;!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
;!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
;!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
; Welcome page
;!insertmacro MUI_PAGE_WELCOME  // 显示导向界面欢迎信息
; Instfiles page(下一步)
;!define MUI_LICENSEPAGE_TEXT_TOP "阅读协议的其余部分,请按<PgDn>往下滚动页面。"
;!define MUI_LICENSEPAGE_TEXT_BOTTOM "如果同意协议中的条款,请选择“接受协议中的条款”并$_CLICK"
;!define MUI_LICENSEPAGE_RADIOBUTTONS #协议条款接受选择,也有别的协议接受方式,看个人爱好。
;!define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT "接受协议中的条款"
;!define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE "不接受协议中的条款"
;!insertmacro MUI_PAGE_LICENSE "License.txt" //你的协议文件


;程序组件界面,用来选择要安装的程序组件
;!insertmacro MUI_PAGE_COMPONENTS
;程序的安装目录
;!insertmacro MUI_PAGE_DIRECTORY
;程序安装进程显示
;!insertmacro MUI_PAGE_INSTFILES
;  装完成界面
;!insertmacro MUI_PAGE_FINISH
;卸载欢迎界面
;!insertmacro MUI_UNPAGE_WELCOME
;卸载确认界面
;!insertmacro MUI_UNPAGE_CONFIRM
;  // 卸载进程显示
;!insertmacro MUI_UNPAGE_INSTFILES
; 卸载完成界面
;!insertmacro MUI_PAGE_FINISH
; 界面语言选择
;!insertmacro MUI_LANGUAGE "English"  // 英文
;!insertmacro MUI_LANGUAGE "SimpChinese"  // 中文简体
; MUI end ------


;Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"  ;  //标题栏显示的文字
;OutFile "Setup.exe"  // 输出的文件名称和类型
;InstallDir "$PROGRAMFILES\ReadPassTrain"  // 安装程序目录,默认是C:\Programfiles\
;
;InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString";  对应 InstallDirRegKey HKLM "安装目录注册表" “注册表名”
;Icon "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"  // 对应本例子中的 Icon MUI_ICON
;  // 显示安装信息
;ShowInstDetails show
;DirText "安装程序将安装 $(^Name) 在下列文件夹。$\r$\n$\r$\n要安装在不同文件夹,单击 [浏览] 并选择其他文件夹。"

;初始化函数oninit(弹出语言选择框),卸载un.
;Function .onInit
;  !insertmacro MUI_LANGDLL_DISPLAY
;FunctionEnd

; 主程序
Section "MainSection" SEC01
  ;SetDetailsPrint textonly #InstFiles界面进度条上面显示的文字
  ;DetailPrint "正在安装必须的程序组件..."
  ;SetDetailsPrint none

  SetOutPath "$INSTDIR\Audio"  ;  // 存放的文件夹
  SetOverwrite ifnewer  ; // 文件覆盖属性,on/off表示打开或者关闭,ifnewer存在新版本强制覆盖;try可以覆盖就覆盖,不可以覆盖就不覆盖;ifdiff有变动就覆盖(更新或更旧)
  File "C:\Users\NAMEJR\Desktop\打包\文件内容\ReadPTCode\Web\Audio\failure.mp3"  ; /打包的文件路径
  SetOutPath "$INSTDIR\CSS"  ; // 多个文件一起打包可重复循环
  File "C:\Users\NAMEJR\Desktop\打包\文件内容\ReadPTCode\Web\CSS\Common.css"  ;  可写成 File "新文件路径+新名称文件" "文件路径的文件"
SectionEnd

Section -Post
SectionEnd
复制代码

EndBy 2020-09-11

2.操作实例:

复制代码
; Script generated by the HM NIS Edit Script Wizard.

# 常量定义
!define PRODUCT_NAME "TestPullBag"  # 产品名称
!define PRODUCT_VERSION "1.0"  # 版本
!define PRODUCT_PUBLISHER "namejr"  # 发布者
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\WindowsFormsApp1.exe"  # 添加注册表
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"  # 定义删除主键列表
!define PRODUCT_UNINST_ROOT_KEY "HKLM"  # 定义卸载目录
!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir"  # 定义开始菜单安装目录

# 引用函数库
!include "MUI.nsh"

# 启动程序
!define MUI_ABORTWARNING  # 安装提示(中途退出会弹出提示框)
!define MUI_ICON "favicon.ico"  # 安装图标
;!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"  # 卸载(更改)图标

# 语言常量定义(目前没发现有什么用处,所以也没用过)
;!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
;!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
;!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"

; Welcome page
!insertmacro MUI_PAGE_WELCOME  # 启动欢迎界面(第一个页面)
; License page
!insertmacro MUI_PAGE_LICENSE "License.txt"  # 自己定义的协议文本(第二个界面)
; Directory page
!insertmacro MUI_PAGE_DIRECTORY  # 选择安装目录界面(第三个界面)
; 第四个界面(开始菜单设置)定义常量
var ICONS_GROUP
!define MUI_STARTMENUPAGE_NODISABLE  # 显示是否创建快捷方式选择框(不显示的话默认是创建的,即不显示是否创建快捷方式选择框)
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "TestPullBag"  # 开始菜单名称设置
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"  # 注册表
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"  # 设置注册表键
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"  # 设置注册表值
!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP  # 打开第四个界面
; 安装进度界面
!insertmacro MUI_PAGE_INSTFILES  # 显示安装向导界面(安装进度条显示,第五个界面)
; 完成界面
!define MUI_FINISHPAGE_RUN "$INSTDIR\WindowsFormsApp1.exe"  # 显示是否运行程序
!insertmacro MUI_PAGE_FINISH  # 打开完成界面(第五个界面)

; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES  # 卸载进程显示

; 安装过程语言设置
;!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "SimpChinese"


Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"  # 标题栏显示的程序信息
OutFile "Setup.exe"  # 安装包名称
InstallDir "$PROGRAMFILES\TestPullBag"  # 安装程序目录名称
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""  # 安装目录注册表
ShowInstDetails show  # 显示安装详情
ShowUnInstDetails show  # 显示卸载详情

# 开始函数
;Function .onInit
;  !insertmacro MUI_LANGDLL_DISPLAY  # 语言选择(目前没发现用处)
;FunctionEnd

Section "MainSection" SEC01
  SetOutPath "$INSTDIR\Sources\Images"
  SetOverwrite try
  File "FirstPush\Sources\Images\横屏.png"
  SetOutPath "$INSTDIR\Sources\Music"
  File "FirstPush\Sources\Music\旧梦一场.wav"
  SetOutPath "$INSTDIR"
  File "FirstPush\WindowsFormsApp1.exe"
  File "FirstPush\WindowsFormsApp1.exe.config"
  File "FirstPush\WindowsFormsApp1.pdb"

; Shortcuts(创建快捷菜单)
  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application  # 开始
  CreateDirectory "$SMPROGRAMS\$ICONS_GROUP"  # 创建
  CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\TestPullBag.lnk" "$INSTDIR\WindowsFormsApp1.exe"  # 开始菜单快捷方式
  CreateShortCut "$DESKTOP\TestPullBag.lnk" "$INSTDIR\WindowsFormsApp1.exe"  # 桌面快捷方式
  !insertmacro MUI_STARTMENU_WRITE_END  # 结束
SectionEnd

Section -AdditionalIcons
  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
  CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe"  # 创建卸载快捷方式
  !insertmacro MUI_STARTMENU_WRITE_END
SectionEnd

Section -Post
  WriteUninstaller "$INSTDIR\uninst.exe"  # 创建(写入)卸载程序
  # 将数据写入到卸载程序里面
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\WindowsFormsApp1.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\WindowsFormsApp1.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd

# 卸载成功提示
Function un.onUninstSuccess
  HideWindow
  MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"
FunctionEnd

# 卸载提示
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2
  Abort
FunctionEnd

# 卸载删除信息
Section Uninstall
  !insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\WindowsFormsApp1.pdb"
  Delete "$INSTDIR\WindowsFormsApp1.exe.config"
  Delete "$INSTDIR\WindowsFormsApp1.exe"
  Delete "$INSTDIR\Sources\Music\旧梦一场.wav"
  Delete "$INSTDIR\Sources\Images\横屏.png"

  Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk"
  Delete "$DESKTOP\TestPullBag.lnk"
  Delete "$SMPROGRAMS\$ICONS_GROUP\TestPullBag.lnk"

  RMDir "$SMPROGRAMS\$ICONS_GROUP"
  RMDir "$INSTDIR\Sources\Music"
  RMDir "$INSTDIR\Sources\Images"
  RMDir "$INSTDIR"

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  SetAutoClose true  # 是否自动关闭,false开启手动关闭
SectionEnd
复制代码

 

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示