NSIS打包软件,可以打造出很多漂亮的软件安装卸载页面,前面我们分享了打包软件的方法和基本代码。今天我们来看看nsis打包软件各个参数的基本意思和说明。
1、Section参数
这个参数和其他语言一样,它是程序执行的入口,一个程序中可以有多个section参数,但最少要保持有一个,nsis会按照这个程序的
代码的先后顺序依次执行。
所有的 Section 都是按照从上到下的顺序执行的,每个 Section 可以用 /o 参数指定默认不选中,也可以使用 SectionSetFlags之
类的命令来更改状态。并非每个Section都一定会执行:假如你显示了组件页面,除了你用脚本或命令来控制选择,用户也可以更改组
件状态,NSIS 自动根据是否选择来决定执行。如果你没有显示组件页面,那么当然会根据组件的最终状态(使用 Section /o 预设状
态以及 SectionSetFlags 更改状态)来决定是否执行。
2、Page参数
Page是程序安装过程的向导页面。
3、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,则卸载程序将不退出。
4、指令集
指令主要指仅在编译时刻执行的命令,主要包括:包含文件、条件化编译、定义常量、定义宏等。
例如:
定义常量:!define MUI_ABORTWARNING
调用宏:!insertmacro MUI_PAGE_WELCOME
5、总结
只是简单的说明了nsis常用组件,实际这个软件的强大之处只有在自己用了之后才能明白,很多功能及写法是靠自己摸索的,软件只是给你提供一个平台。
LEAVE A REPLY
要发表评论,您必须先登录。