2.3 脚本结构
一个 NSIS 脚本应该包括安装程序属性和区段、函数。你也可以使用编译器命令在编译的时候进行指定。所必需的是 OutFile 指令 (该命令告诉 NSIS 安装程序输出路径) 和一个区段。
2.3.1 安装程序属性
安装程序属性确定你的安装程序的性能、外观和习惯。由这些属性你可以更改安装的时候显示的文本、安装类型的数量等。这些命令大多数在运行时仅被设定并且不能更改。
其他基本的指令为 Name 和 InstallDir。
关于安装程序属性更多的信息,可以参阅安装程序属性。
2.3.2 页面
一个非静默安装程序需要向导页面来指导用户运行安装程序,你可以通过 Page 命令 (或更多高级设置如 PageEx)。来设定哪个页面显示。一个典型的设置像这样:
Page license Page components Page directory Page instfiles UninstPage uninstConfirm UninstPage instfiles
对于安装程序,典型的页面设置应该显示许可协议页面,允许选择要安装的组件,允许选择要安装的目录,最后安装选择的组件。对于卸载程序,应该显示卸载确认页面,然后执行卸载。
2.3.3 区段
在一个普通的安装包里用户需要安装许多东西。例如在 NSIS 分配安装包里你可以选择安装源码、附加插件、脚本样例或其他。里面的每个组件都有它自己的代码块,当用户选择了安装该组件,那么安装程序就会执行对应的代码。在脚本里,这些代码称为区段。每个可见的区段都可以作为一个组件给用户选择是否安装,在这里我们暂不讨论不可见的区段。你可以只使用一个区段来构建安装包,但是如果你想要使用组件页来让用户选择可选的组件,那你就需要使用多个区段。
卸载程序也可以有多个区段。卸载程序区段名前要加上前缀“un.”。例如:
Section "安装区段" SectionEnd Section "un.卸载区段" SectionEnd
使用在段里的指令和安装程序属性指令不一样,他们在用户电脑运行环境里执行。这些指令可以解压文件读取和写入注册表、INI 文件或普通文件,创建目录,创建快捷方式和更多功能。你可以在指令找到更多。
更多的基本用法说明 SetOutPath 告诉安装程序要把文件输出到哪里,和要解压哪些文件。
例:
Section "我的程序" SetOutPath $INSTDIR File "我的程序.exe" File "自述.txt" SectionEnd
关于区段更详细的信息请看区段。
2.3.4 函数
函数和区段类似,也包含了代码。区段和函数所不同的是他们被调用的形式。一共有两种函数类型:用户函数和回调函数。
用户函数可以从一个区段里或另一个函数使用 Call 指令。用户函数不能直接执行而只能调用它。在函数内的代码都会被执行然后安装程序会继续执行 Call 指令后面的指令,除非你在函数里面使用了退出指令。用户函数当你在安装程序里需要多次、多处使用一组指令的时候非常有用。如果你把代码放到一个函数里你可以节省拷贝的次数并且更容易的去修改、更新代码。
回调函数可以在某些定义事件之前被调用比如当安装程序开始运行时。回调是可选的。例如你想欢迎用户使用你的安装程序你可以定义一个名为 .onInit 的函数。NSIS 编译器会由它的名字知道它是一个回调函数并且会在安装程序开始时调用它。
Function .onInit MessageBox MB_YESNO "即将安装“我的程序”,要继续吗?" IDYES gogogo Abort gogogo: FunctionEnd