NSIS 使用笔记
nsis是一个免费开源的Windows程序安装包生成工具。
nsis可以创建带安装、卸载、系统设置、文件提取等功能的安装包。
nsis采用脚本方式创建安装包,可以很方便的控制安装过程。
查看NSIS手册是最好的学习方式。
nsis脚本包含的几个部分:
Name
InstallDir
OutFile:生成的安装包文件存放位置,一个安装包至少包含一个section。
非静态的安装包一定有一组安装向导页面,用于配置安装过程(例如设置安装路径)。
典型的页面设置如下:
# 许可协议
Page license
# 选择安装组件
Page components
# 设置安装路径
Page directory
# 显示最终要安装的组件
Page instfiles
# 确认卸载
UninstPage uninstConfirm
# 要卸载的组件
UninstPage instfiles
每一个section都对应一个component。当改组件被选中后,将会执行对应section的脚本指令。
section的名字就是显示的component名字。
例如:
Section "My Program"
SetOutPath $INSTDIR
File ”MyProgram.exe“
File "Readme.txt"
SectionEnd
function可以包含脚本代码,和section类似。function和section的区别是它们的调用方式不同。函数有两种类型,用户函数和回调函数。
用户函数通过Call指令调用;回调函数由安装器的特定事件触发。
普通函数、事件函数
格式:
Function func_name
# commands
FunctionEnd
函数名称格式:
调用函数:
Call SayHello
条件指令:
使用LogicLib(LogicLib.nsh)可以用很简单的宏构建复杂的逻辑结构。
使用LogicLib:
!include LogicLib.nsh
LoginLib中的指令:
使用Var声明变量,变量都是全局变量。
声明并使用变量:
Var BLA ;Declare the variable
Section bla
StrCpy $BLA "123" ;Now you can use the variable $BLA
SectionEndVar BLA ;Declare the variable
Function bla
# 入栈
Push $R0
# 出栈
Pop $R0
FunctionEnd
通常可以使用MessageBoxes或DetailPrint输出调试日志。
也可以使用DumpState插件输出变量信息。
默认情况下,所有的安装行为都会输出到日志窗口。
当用户执行安装或卸载程序时,Page将以脚本中定义的顺序展示。当到达instfiles page,选中的组件的section的代码将以定义的顺序执行。如果没有展示component page,所有的section都会被执行。
定义编译时的常量(宏常量):!define
!define VERSION "1.0.3"
Name "My Program ${VERSION}"
OutFile "My Program Installer - ${VERSION}.exe"
定义宏代码块:macro
一次定义,多次复用。和c++中的宏类似,编译时时将代码插入引用的位置。
!macro MyFunc UN
Function ${UN}MyFunc
Call ${UN}DoRegStuff
ReadRegStr $0 HKLM Software\MyProgram key
DetailPrint $0
FunctionEnd
!macroend
!insertmacro MyFunc ""
!insertmacro MyFunc "un."
在StrCmp或其他逻辑判断语句后需要跳转执行代码,例如:
# 1 $0==0则跳转至标签view
StrCmp $0 0 view
# 2 $R0==0不做任何处理,$R0!=0则跳转至之后的第3条指令
StrCmp $R0 0 0 +3
常用指令: