NSIS 安装windows 安装包(包括QT和MFC)

2024-01-09 10:34:52

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用于参数传递,以及系统变量用于特定用途使用这些参数应该通过PushPop的方式

$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

文章来源:https://blog.csdn.net/baidu_16370559/article/details/135471776
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。