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