二. 简单的NSIS安装包

这篇博客介绍了如何使用NSIS(Nullsoft Scriptable Install System)及其HMNISEdit编辑器,通过向导创建一个基本的安装包,并详细讲解了脚本文件的结构和指令。内容包括新建脚本向导的步骤,现代用户界面与标准界面的区别,以及安装包的编译和运行效果。此外,还展示了如何自定义安装界面,包括图标、文字和页面设置。
摘要由CSDN通过智能技术生成

新建脚本:向导

我们先从一个简单的NSIS安装包开始吧,就像前面(NSIS介绍)所说,我们虽然看过用户手册,可要写安装脚本无从下手,那我们的编辑工具HM NIS Edit就派上用场了。

打开HM NIS Edit,点击菜单“文件”->“新建脚本:向导”,会有向导一步步让我们输入信息,最后根据我们的输入生成.nsi脚本文件,下面我们一步步演示:

新建脚本:脚本文件

最后生成的脚本文件我们保存为MyApp.nsi,打开查看脚本(对照着上面截图中设置的项再配合用户手册查看,你会知道一个完整的脚本文件的基本结构和基本的指令用法)

; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "My application"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "My company, Inc."
!define PRODUCT_WEB_SITE "http://www.mycompany.com"
!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-uninstall.ico"

; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "E:\ZZL\ADWeb\安装包制作\Licence.txt"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!insertmacro MUI_PAGE_FINISH

; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES

; Language files
!insertmacro MUI_LANGUAGE "SimpChinese"

; MUI end ------

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Setup.exe"
InstallDir "$PROGRAMFILES\My application"
ShowInstDetails show
ShowUnInstDetails show

Section "MainSection" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite try
  File "E:\ZZL\ADWeb\安装包制作\Release\404.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\Default.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\Error.aspx"
  SetOutPath "$INSTDIR\Images"
  File "E:\ZZL\ADWeb\安装包制作\Release\Images\1_close.png"
  File "E:\ZZL\ADWeb\安装包制作\Release\Images\1_open.png"
  File "E:\ZZL\ADWeb\安装包制作\Release\Images\add.png"
  SetOutPath "$INSTDIR\Scripts"
  File "E:\ZZL\ADWeb\安装包制作\Release\Scripts\CommonScript.js"
  SetOutPath "$INSTDIR\SystemLog"
  File "E:\ZZL\ADWeb\安装包制作\Release\SystemLog\LogStatisticsDetail.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\SystemLog\SystemLogList.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\SystemLog\SystemLogStatistics.aspx"
  SetOutPath "$INSTDIR"
  File "E:\ZZL\ADWeb\安装包制作\Release\Web.config"
SectionEnd

Section -Post
  WriteUninstaller "$INSTDIR\uninst.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}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  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
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2
  Abort
FunctionEnd

Section Uninstall
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\Web.config"
  Delete "$INSTDIR\SystemLog\SystemLogStatistics.aspx"
  Delete "$INSTDIR\SystemLog\SystemLogList.aspx"
  Delete "$INSTDIR\SystemLog\LogStatisticsDetail.aspx"
  Delete "$INSTDIR\Scripts\CommonScript.js"
  Delete "$INSTDIR\Images\add.png"
  Delete "$INSTDIR\Images\1_open.png"
  Delete "$INSTDIR\Images\1_close.png"
  Delete "$INSTDIR\Error.aspx"
  Delete "$INSTDIR\Default.aspx"
  Delete "$INSTDIR\404.aspx"

  RMDir "$INSTDIR\SystemLog"
  RMDir "$INSTDIR\Scripts"
  RMDir "$INSTDIR\Images"
  RMDir "$INSTDIR"

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  SetAutoClose true
SectionEnd

值得注意的是,从新建脚本向导的第三步有选项用户图形界面我们默认选择的是“现代”,对应脚本中引入了NSIS现代用户界面头文件(!include "MUI.nsh"),对应的安装页面中都是以!insertmacro MUI_PAGE_***开头(如:欢迎页面!insertmacro MUI_PAGE_WELCOME),详细的说明请查看NSIS Modern User Interface

安装包:现代界面

下面我们看下安装包的效果,在HM NIS Edit界面,点击菜单“NSIS”->“编译并运行”,输出窗口会显示编译过程,如果没有出错,会直接执行编译生成的Setup.exe,安装截图如下:

从上面截图可以看到我们的安装包共有5个用户界面,这个和脚本文件中是对应的:

; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "E:\ZZL\ADWeb\安装包制作\Licence.txt"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!insertmacro MUI_PAGE_FINISH

其中“安装记录页面”将实际执行安装区段中的指令,这些指令可以解压文件读取,读写注册表、INI文件或普通文件,执行Powershell脚本,创建目录,创建快捷方式等等。如果一个安装程序有多个组件,每个组件都有它自己的代码块,当用户选择了安装该组件,那么安装程序就会执行对应的代码,那么每个组件就需要对应一个区段,具体关于可选组件的信息会在以后章节介绍。我们目前只有一个安装区段,是把部署包文件放入安装目录:

Section "MainSection" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite try
  File "E:\ZZL\ADWeb\安装包制作\Release\404.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\Default.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\Error.aspx"
  SetOutPath "$INSTDIR\Images"
  File "E:\ZZL\ADWeb\安装包制作\Release\Images\1_close.png"
  File "E:\ZZL\ADWeb\安装包制作\Release\Images\1_open.png"
  File "E:\ZZL\ADWeb\安装包制作\Release\Images\add.png"
  Sleep 20000
  SetOutPath "$INSTDIR\Scripts"
  File "E:\ZZL\ADWeb\安装包制作\Release\Scripts\CommonScript.js"
  SetOutPath "$INSTDIR\SystemLog"
  File "E:\ZZL\ADWeb\安装包制作\Release\SystemLog\LogStatisticsDetail.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\SystemLog\SystemLogList.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\SystemLog\SystemLogStatistics.aspx"
  SetOutPath "$INSTDIR"
  File "E:\ZZL\ADWeb\安装包制作\Release\Web.config"
SectionEnd

关于界面上的信息都是我们在脚本向导中设置的(如应用程序名称、版本、公司、图标、授权信息、语言等),可以在脚本中修改:

; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "My application"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "My company, Inc."
!define PRODUCT_WEB_SITE "http://www.mycompany.com"
!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-uninstall.ico"

还有一些是关于安装包本身的信息(如:名称、默认安装路径、生成安装包名称、是否显示安装详情等):

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Setup.exe"
InstallDir "$PROGRAMFILES\ADWebManager"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
BrandingText " MyCompany Ltd."

其中注意加一行命令BrandingText " Prolliance Ltd.",这样用户安装界面中就不是NSIS的信息了,前后对比如下:

修改脚本:标准界面

上面我们使用HM NIS Edit的向导创建了具有“现代界面”的安装包,其中脚本文件中引入了NSIS现代用户界面头文件(!include "MUI.nsh"),现在我们不要引入额外的头文件,改成NSIS标准的界面试试,就像我们查看用户手册看到的,我们可以通过Page命令(或更多高级设置如PageEx)。我们修改后的脚本文件如下:

; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "My application"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "My company, Inc."
!define PRODUCT_WEB_SITE "http://www.mycompany.com"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"

; pages
PageEx license
       LicenseText "许可页面"
       LicenseData "E:\ZZL\ADWeb\安装包制作\Licence.txt"
       ;LicenseForceSelection
PageExEnd
PageEx directory
       DirText "目录选择页面" "目标文件夹" "浏览..."
PageExEnd
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles

; MUI end ------

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Setup.exe"
InstallDir "$PROGRAMFILES\My application"
ShowInstDetails show
ShowUnInstDetails show
BrandingText " MyCompany Ltd."

Section "MainSection" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite try
  File "E:\ZZL\ADWeb\安装包制作\Release\404.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\Default.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\Error.aspx"
  SetOutPath "$INSTDIR\Images"
  File "E:\ZZL\ADWeb\安装包制作\Release\Images\1_close.png"
  File "E:\ZZL\ADWeb\安装包制作\Release\Images\1_open.png"
  File "E:\ZZL\ADWeb\安装包制作\Release\Images\add.png"
  Sleep 20000
  SetOutPath "$INSTDIR\Scripts"
  File "E:\ZZL\ADWeb\安装包制作\Release\Scripts\CommonScript.js"
  SetOutPath "$INSTDIR\SystemLog"
  File "E:\ZZL\ADWeb\安装包制作\Release\SystemLog\LogStatisticsDetail.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\SystemLog\SystemLogList.aspx"
  File "E:\ZZL\ADWeb\安装包制作\Release\SystemLog\SystemLogStatistics.aspx"
  SetOutPath "$INSTDIR"
SectionEnd

Section -Post
  WriteUninstaller "$INSTDIR\uninst.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}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  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
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2
  Abort
FunctionEnd

Section Uninstall
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\Web.config"
  Delete "$INSTDIR\SystemLog\SystemLogStatistics.aspx"
  Delete "$INSTDIR\SystemLog\SystemLogList.aspx"
  Delete "$INSTDIR\SystemLog\LogStatisticsDetail.aspx"
  Delete "$INSTDIR\Scripts\CommonScript.js"
  Delete "$INSTDIR\Images\add.png"
  Delete "$INSTDIR\Images\1_open.png"
  Delete "$INSTDIR\Images\1_close.png"
  Delete "$INSTDIR\Error.aspx"
  Delete "$INSTDIR\Default.aspx"
  Delete "$INSTDIR\404.aspx"

  RMDir "$INSTDIR\SystemLog"
  RMDir "$INSTDIR\Scripts"
  RMDir "$INSTDIR\Images"
  RMDir "$INSTDIR"

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  SetAutoClose true
SectionEnd

安装包:标准界面

下面我们看下标准界面的脚本生成的安装包效果,执行后在HM NIS Edit界面,点击菜单“NSIS”->“编译并运行”,输出窗口会显示编译过程,如果没有出错,会直接执行编译生成的Setup.exe,安装截图如下:

是不是比较起来“现代用户界面”,标准的界面会很丑,而且NSIS内置的标准安装界面没有欢迎、完成界面(只有许可、目录选择、组件、安装记录页面) ,另外“上一步”、“下一步”、“取消”等按钮需要额外的语言包文件来载入,不如“现代用户界面”只需要一个指令(!insertmacro MUI_LANGUAGE "SimpChinese")来指定采用的语言,所以接下来我们还是采用“现代用户界面”来制作安装包,当然这些界面上的图标,任何地方的文字都是可以定制的。

下面章节就以实际中的应用作为例子,然后由该例子展开来说明页面的定制、PowerShell命令的调用、SQL Server数据库的访问、Web应用程序的部署、失败的回滚和卸载程序的执行等等。

NSIS安装包制作教程 分为三个目录:基础,插件,脚本 NSIS System 插件 NSIS VPatch 3.1插件 NSIS InstallOptions 2 插件 NSIS Modern UI(新式用户界面)插件 NSIS的Modern UI插件 NSIS里特殊符号的表达方法 两组件互斥 NSIS 常用小问题合集 资源替换式的美化包制作方式代码 安装完毕后如何刷新文件关联 教你如何编程调用 NSIS 的插件 NSIS安装程序概要 实现 NSIS 自定义页面中的控件操作代码 如何使用NSIS实现多目录安装设置 如何用NSIS在加入注册表 用NSIS 制作自己的安装程序 bluewind 的 wmp9 nsis安装脚本 NSIS安装脚本简明教程 取得winamp的NSIS脚本的教程 迅雷5.7.3.389 AYU增强版的安装脚本 NSIS制作迅雷安装的脚本 迅雷5.7.2.371 DDR1.5版去广告版源代码说明 NSIS删除安装程序自身 帮助文件中关于静默安装的说明 NSIS实现静默安装的两种方法 nsis的附加任务代码 关于 NSIS 写入注册表的问题 少轻狂制作的Windows优化大师的安装脚本 aipc编写的nsis极点安装脚本 官方 NSIS 插件全集 全方位掌握NSIS的使用 NSIS语言里怎样安装一个.inf文件? 如果要关联某个文件给程序应该怎么做? 如何避免显示解压缩进度框? 关于检测操作系统的问题 在结束页面添加运行程序选项 NSIS的botton选一如何实现? NSIS灵活应用用逻辑库 NSIS调用inf安装驱动后的卸载问题 NSIS的组件互斥代码 在NSIS中如何禁止一个组件组的父项的点击事件 关于打破 NSIS 的 8192 字节限制的更简单方法 NSIS 自定义页面结合组件选择安装 一个关于组件跟自定义页面的控制问题 如何把安装的卸载程序放到其他目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值