NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。
区段
是对应某种安装/卸载选项的处理逻辑,该段代码仅当用户选择相应的选项才被执行。卸载程序的区段名用"un."作为前缀。
/o表示该区段默认不选上,-表示隐藏区段(匿名区段也是隐藏区段),!表示需要粗体显示的区段。
Section "Installer Section"
SectionEnd ?
Section "un.Uninstaller Section"
SectionEnd
函数
在nsi脚本中函数分为两种:用户自定义函数和回调函数。
用户自定义函数
Function <函数名>
?# some commands
FunctionEn
用户自定义函数仅当是Call指令调用时才被执行
回调函数
回调函数则是由在特定的时间点触发的程序段
安装逻辑定义以下回调函数
.onGUIInit、.onInit、.onInstFailed、.onInstSuccess、.onGUIEnd、.onMouseOverSection、.onRebootFailed、.onSelChange、.onUserAbort、.onVerifyInstDir
卸载逻辑回调函数
un.onGUIInit、un.onInit、un.onUninstFailed、un.onUninstSuccess、un.onGUIEnd、un.onRebootFailed、un.onUserAbort
变量
用var关键字来定义变量,使用$来引用变量
$INSTDIR
用户定义的解压路径。
$PROGRAMFILES
程序文件目录(通常为?C:Program Files?但是运行时会检测)。
0-?9,?R0?-R9
脚本中定义了寄存器变量0-?9,?R0?-R9用于参数传递,以及系统变量用于特定用途。使用这些参数应该通过Push和Pop的方式
$STARTMENU
开始菜单目录(常用于添加一个开始菜单项,使用 CreateShortCut)。该常量的内容(所有用户或当前用户)取决于SetShellVarContext 设置。默认为当前用户。
$SMPROGRAMS
开始菜单程序目录(当你想定位 $STARTMENU程序 时可以使用它)。该常量的内容(所有用户或当前用户)取决于SetShellVarContext 设置。默认为当前用户。
$SMSTARTUP
开始菜单程序/启动 目录。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
File
作用:释放文件到当前输出路径。
如果使用了 /r 开关,匹配的文件将会在子目录里被递归的搜索。
将ProjectFiles目录下的所有文件释放到输出目。
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File /r "ProjectFiles*.*"
Delete
作用:从目标系统删除文件
Delete "$INSTDIR\uninst.exe"
RMDir
作用:删除目录
RMDir /r "$INSTDIR\*.*"
SetOutPath
作用:设置输出路径($OUTDIR)且当路径不存在时创建(需要时会递归创建)。必须为绝对路径名,通常都使用?$INSTDIR。
将用户定义的解压路径作为输出目录
SetOutPath $INSTDIR
CreateShortCut
作用:创建快捷文件.lnk?目标文件
CreateShortCut "$SMPROGRAMS\PSC_FS\Uninstall.lnk" "$INSTDIR\uninst.exe"
WriteRegStr、WriteRegExpandStr
作用:把字符串写入注册表
根键如下:
HKLM?或HKEY_LOCAL_MACHINE
HKCU?或HKEY_CURRENT_USER
??WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
??WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
ReadRegStr
作用:读取注册表信息
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{8d5fdf81-7022-423f-bd8b-b513a1050ae1}" "BundleVersion"
DeleteRegKey
作用:删除一个注册表键。
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
Exec
作用:这应该算是常用的命令了,执行一个指定的程序并且立即继续安装,就是直接执行一个程序。
Exec "$INSTDIR\vc_redist.x86.exe ?/q" ??;若不存在,执行静默安装??/q表示静默安装
ExecWait
作用:执行一个指定的程序并且等待运行处理结束。
Exec "$INSTDIR\vc_redist.x86.exe ?/q" ??;若不存在,执行静默安装??/q表示静默安装
RegDLL
作用:载入指定的 DLL 并且调用 DllRegisterServer (或入口点名称,当指定之后)。其实就是注册或加载你要的插件
!insertmacro
作用:插入宏
通过宏插入欢迎页面
!insertmacro MUI_PAGE_WELCOME
StrCpy
作用:复制字符串
StrCpy $0 "a bbbbbbbb"
Push
作用:把一个字串压入堆栈,该字串可随后从堆栈里弹出。
Pop
作用:从堆栈里弹出一个字串到用户变量?$x。如果堆栈是空的,则会置一个错误标记。
Goto
作用:跳转到指定标记
IfErrors?
错误时跳转到标记?
IfErrors 0 VSRedistInstalled
MessageBox
作用:显示一个包含“消息框文本”的消息框。“消息框选项列表”必须为下面的一个或多个,多个使用?|?来隔开。
MB_OK -?显示?OK?按钮
MB_OKCANCEL -?显示?OK?和取消按钮
MB_ABORTRETRYIGNORE -?显示退出、重试、忽略按钮
MB_RETRYCANCEL -?显示重试和取消按钮
MB_YESNO -?显示是和否按钮
MB_YESNOCANCEL -?显示是、否、取消按钮
MB_ICONEXCLAMATION -?显示惊叹号图标
MB_ICONINFORMATION -?显示信息图标
MB_ICONQUESTION -?显示问号图标
MB_ICONSTOP -?显示终止图标
MB_TOPMOST -?使消息框在最前端显示
MB_SETFOREGROUND -?设置前景
MB_RIGHT -?右对齐文本
MB_RTLREADING - RTL?阅读次序
Function un.onInit
???Push $R3
???ClearErrors
???ReadRegStr $R3 ?${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "install"
???StrCmp $R3 "1" ?uninstallfinish
???MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" \
???/SD IDYES \
???IDYES uninstallfinish \
???IDNO ?Abortuninstall
Abortuninstall:
????Abort
uninstallfinish:
???pop $R3
?FunctionEnd
NSIS工具安装包下载
链接:https://pan.baidu.com/s/1ticaAl3T7kp4kJOwSTCxWA?
提取码:xn2n
具体制作安装包的过程参考:https://www.cnblogs.com/hi-gdl/p/12449912.html