简介
NSIS(Nullsoft Scriptable Install System)是一个开源的Windows系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。这如其名字所指出的那样,NSIS是通过它的脚本语言来描述安装程序的行为和逻辑的。NSIS的脚本语言和通常的编程语言有类似的结构和语法,但它是为安装程序这类应用所设计的。
工具:
HW VNISEdit(NSIS脚本编辑器)
1、使用编辑器中NSIS脚本向导功能,自动生成对应的nsi脚本。
点击文件->新建脚本:向导,接下来根据向导页面的设置选项一步步设置你需要的安装条件。
2、也可以在编辑器中编写nsi脚本,然后再编译生成exe安装包文件。
脚本结构
NSIS脚本(下称nsi脚本)主要包含安装程序属性、页面、区段、函数。
属性
用来定义安装程序的行为和界面风格,这些属性大部分是编译时刻属性,即不能在运行时刻改变。
页面
安装程序的向导页面
例:
Page license
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
区段
是对应某种安装/卸载选项的处理逻辑,该段代码仅当用户选择相应的选项才被执行。卸载程序的区段名用"un."作为前缀。
例:
Section "Installer Section"
SectionEnd
Section "un.Uninstaller Section"
SectionEnd
区段名的修饰符/o表示该区段默认不选上,-表示隐藏区段(匿名区段也是隐藏区段),!表示需要粗体显示的区段。
SectionIn表示该区段和安装类型之间的关系
SubSection表示子区段
SectionIn insttype_index [insttype_index] ... [RO]
;RO修饰符表示不可修改。
SubSection [/e] Caption [subsection_name index output]
;修饰符/e用于该子区段的所有区段是否默认展开。
函数
包含了模块化的安装逻辑。
在nsi脚本中函数分为两种:用户自定义函数和回调函数。
用户自定义函数
用户自定义函数仅当是Call指令调用时才被执行,如果函数体中没有abort语句,则安装程序执行完了用户自定义函数,继续运行Call语句和指令。
用户自定义函数的语法:
Function
# some commands
FunctionEn
回调函数
回调函数则是由在特定的时间点触发的程序段。
例:
Function .onInit
MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo
Abort
gogogo:
FunctionEnd
安装逻辑回调函数
NSIS对于安装逻辑定义以下回调函数:
.onGUIInit、.onInit、.onInstFailed、.onInstSuccess、.onGUIEnd、.onMouseOverSection、.onRebootFailed、.onSelChange、.onUserAbort、.onVerifyInstDir
卸载逻辑回调函数
NSIS对于卸载逻辑定义以下回调函数:un.onGUIInit、un.onInit、un.onUninstFailed、un.onUninstSuccess、un.onGUIEnd、un.onRebootFailed、un.onUserAbort
基本语法
变量
nsi脚本用var关键字来定义变量,使用$来引用变量。
注意:变量是全局的并且是大小写敏感的。
除了用户自定义的变量外,nsi脚本中定义了寄存器变量009,R0R0R9用于参数传递,以及系统变量用于特定用途,这些变量主要有:$INSTDIR用户定义的解压路径。$PROGRAMFILES程序文件目录(通常为C:\Program Files但是运行时会检测)。$COMMONFILES公用文件目录。这是应用程序共享组件的目录(通常为C:\Program Files\Common Files但是运行时会检测)。$DESKTOP
Windows桌面目录(通常为C:\windows\desktop但是运行时会检测)。该常量的内容(所有用户或当前用户)取决于SetShellVarContext设置。默认为当前用户。$EXEDIR安装程序运行时的位置。(从技术上来说你可以修改改变量,但并不是一个好方法)。${NSISDIR}包含NSIS安装目录的一个标记。在编译时会检测到。常用于在你想调用一个在NSIS目录下的资源时,例如:图标、界面……$WINDIR
Windows目录(通常为C:\windows或C:\winnt但在运行时会检测)$SYSDIR
Windows系统目录(通常为C:\windows\syste