NSIS打包(一)常用概念简介

时间:2021-02-05 08:55:45

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

以上是最常用的组件,简单说明了下概念,接下来正式开始打包旅程。