目前,我用的是 notepad++
Messagebox MB_OK|MB_ICONINFORMATION \
"This is a sample that shows how to use line breaks for larger commands in NSIS scripts"
$\"
进行转义,或者使用 ` 或 ’ 进行字符串的引用.nsi
,头文件的拓展名是 .nsh
!include
位于NSIS安装路径下Include目录中的头文件可以直接包含,例如:!include Sections.nsh
一个NSIS脚本包括: Installer Attributes 、Page 、Sections 、Functions。可以用编译器进行编译时的操作。
OutFile
指令是必备的,该指令指明安装程序的输出文件。
一个脚本文件中至少包含一个 Sections 。
决定了安装包的行为和外观,大部分命令运行时不可更改
非静默安装有一系列的向导页,用于引导用户进行安装配置。通过 Page
指令可以进行页面的展示,例如
Page license
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
可以显示一个许可协议页面、安装组件的选择页面、安装路径的选择页面、在instfiles
页安装所选的组件;卸载的时候会有一个确认页,然后再instfiles
页进行卸载
通常,安装包有几个部分进行选择,例如NSIS的安装包中,可以选择附加工具、插件、实力等。不同的组件有各自的安装代码,依据用户选择安装的组件的不同,安装包执行相应的代码。
在脚本中,代码被定义在sections
中,每个section
对应于组件页上的一个组件,section
的名称就是所显示组件的名称,当组件被选中(要被安装)时section
中的代码将被执行,只有一个section
页也可以构建安装包,但是要想允许用户选择要安装那些组件,就一定需要多个section
页
卸载程序也可以有多个section
页,卸载程序以un.
为前缀,例如:
Section "Installer Section"
SectionEnd
Section "un.Installer Section"
SectionEnd
section
中使用的指令与installer attribute
有很大的不同,它们是运行时在用户的电脑上执行的。这些指令可以提取文件,读写注册表、ini文件、和一般的文件,创建目录,创建快捷方式等。
SetOutPath
是最基础的指令,它告诉安装包从哪提取文件、提取那些文件。例如
Section "myProgram"
SetOutPath $INSTDIR
File "My Program.exe"
File "Readme.txt"
SectionEnd
function
中也可以像section
一样包含脚本代码。function
与section
的区别在与调用方式的不同。function
有两类,用户函数和回调函数。
用户函数由用户通过Call
指令在section
或其他函数中调用。用户函数只有在调用的时候才会被执行。在用户函数执行完毕之后会执行Call
指令之后的其他命令,除非在用户函数中结束了安装包的运行。当有一系列指令要在多个位置被执行时用户函数是很好的选择,可以省掉代码拷贝的时间,并让代码变得简洁。(这点跟程序里函数是一样的)。
回调函数由安装包在某些已定义时间中调用,例如安装包启动时,回调是可选的。
例如,可以定义一个函数.onInit
用于欢迎用户使用安装包。NSIS的编译器可以根据函数的名字将它识别为回调函数,并在安装包启动的时候调用。
Function .onInit
MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo
Abort
gogogo:
FunctionEnd
在回调函数中Abort
具有特殊含义,在不同的回调函数中它的含义不同。在上述实例中它的含义的是停止初始化安装程序,并立即退出