1、NSIS简介
官网:http://sourceforge.net/projects/nsis/
*:
http://zh.wikipedia.org/wiki/Nullsoft%E8%85%B3%E6%9C%AC%E5%AE%89%E8%A3%9D%E7%B3%BB%E7%B5%B1
2、Section
想main函数对于C语言一样,Section是NSIS的入口,区别在于:C语言中main函数只有一个,NSIS中Section却可以有多个,但最少得有一个。
NSIS中的Section按照在文件中的顺序依次执行。
所有的 Section 都是按照从上到下的顺序执行的,每个 Section 可以用 /o 参数指定默认不选中,也可以使用 SectionSetFlags之类的命令来更改状态。并非每个Section都一定会执行:假如你显示了组件页面,除了你用脚本或命令来控制选择,用户也可以更改组件状态,NSIS 自动根据是否选择来决定执行。如果你没有显示组件页面,那么当然会根据组件的最终状态(使用 Section /o 预设状态以及 SectionSetFlags 更改状态)来决定是否执行。
3、Page
Page指的是安装程序的向导页面。
4、Function
NSIS中的函数分为用户自定义函数和回调函数。
自定义函数需要通过Call命令来调用,回调函数是在特定的时间点触发的程序段。
以下是几个基本的回调函数,以on开头的是安装过程的回调,以un.on开头的是卸载过程的回调:
.onGUIInit |
第一个页面被载入并且显示安装程序对话框前被调用,允许你来调整用户界面。 |
.onInit |
在当安装程序接近完成初始化时调用。如果 .onInit 函数调用了 Abort,则安装程序立即退出。 |
.onInstFailed |
该回调函数当在安装失败后用户点击“取消”按钮时被调用 (如果安装程序不能释放任何文件,或安装脚本使用了 Abort 命令)。 |
.onInstSuccess |
当安装成功且正当安装窗口关闭前 (如果 AutoCloseWindow 或 SetAutoClose 被设为 false 时可能在用户点击“关闭”之后) 调用。 |
. onGUIEnd |
正当安装程序窗口关闭之后被调用。需要时用来释放任何与用户界面有关的插件。 |
.onMouseOverSection |
只要鼠标在树形区段选择框上移动时就被调用。这可以使你给每个区段设置一个样本描述。鼠标停留所在的当前区段 ID 已被临时的保存,为 $0。 |
.onRebootFailed |
当 Reboot 指令失败时被调用。WriteUninstaller、plug-ins、File 和 WriteRegBin 不能用于该回调函数。 |
.onSelChange |
当在组件选择页面选项被改变时被调用。常用于使用 SectionSetFlags 和 SectionGetFlags。 |
.onUserAbort |
当用户点击“取消”按钮且安装尚未失败时被调用。如果该函数调用 Abort,则安装将不退出。 |
.onVerifyInstDir |
该回调对于你的安装程序来说可以允许代为控制安装路径是否有效。每次用户更改安装路径的时候这段代码都会被调用一次,所以不要在这里使用 MessageBox 等傻指令。如果该函数调用 Abort,则 $INSTDIR 的路径被认为无效。 |
un.onGUIInit |
在第一个页面被载入并且显示卸载程序对话框前被调用,允许你来调整卸载程序的界面。 |
un.onInit |
当卸载程序接近完成初始化时调用。如果 un.onInit 函数使用了 Abort ,则卸载程序立即退出。注意如果需要时该函数可以验证和/或修改 $INSTDIR。 |
un.onUninstFailed |
当在卸载失败后用户点击“取消”按钮时被调用 (如果使用了 Abort 命令或其它失败的命令)。 |
un.onUninstSuccess |
当卸载成功且正当卸载程序窗口关闭前 (如果 SetAutoClose 被设为 false 时可能在用户点击“关闭”之后) 调用。 |
un.onGUIEnd |
正当卸载程序窗口关闭之后被调用。需要时用来释放任何与用户界面有关的插件。 |
un.onRebootFailed |
当 Reboot 指令失败时被调用。WriteUninstaller、plug-ins、File 和 WriteRegBin 不能用于该回调函数。 |
un.onUserAbort |
当用户点击“取消”按钮且卸载尚未失败时被调用。如果该函数调用 Abort,则卸载程序将不退出。 |
5、指令
指令主要指仅在编译时刻执行的命令,主要包括:包含文件、条件化编译、定义常量、定义宏等。
例如:
定义常量:!define PI 3.14
定义宏:
!macro name parameterlist
!macroend
调用宏:!insertmacro name
以上是最常用的组件,简单说明了下概念,接下来正式开始打包旅程。