NSIS(Nullsoft Scriptable Install System)是一個(gè)開(kāi)源的 Windows 系統(tǒng)下安裝程序制作程序。它提供了安裝、卸載、系統(tǒng)設(shè)置、文件解壓縮等功能。
基本概念
區(qū)段
是對(duì)應(yīng)某種安裝/卸載選項(xiàng)的處理邏輯,該段代碼僅當(dāng)用戶選擇相應(yīng)的選項(xiàng)才被執(zhí)行。卸載程序的區(qū)段名用"un."作為前綴。
/o表示該區(qū)段默認(rèn)不選上,-表示隱藏區(qū)段(匿名區(qū)段也是隱藏區(qū)段),!表示需要粗體顯示的區(qū)段。
Section "Installer Section"
SectionEnd ?
Section "un.Uninstaller Section"
SectionEnd
函數(shù)
在nsi腳本中函數(shù)分為兩種:用戶自定義函數(shù)和回調(diào)函數(shù)。
用戶自定義函數(shù)
Function <函數(shù)名>
?# some commands
FunctionEn
用戶自定義函數(shù)僅當(dāng)是Call指令調(diào)用時(shí)才被執(zhí)行
回調(diào)函數(shù)
回調(diào)函數(shù)則是由在特定的時(shí)間點(diǎn)觸發(fā)的程序段
安裝邏輯定義以下回調(diào)函數(shù)
.onGUIInit、.onInit、.onInstFailed、.onInstSuccess、.onGUIEnd、.onMouseOverSection、.onRebootFailed、.onSelChange、.onUserAbort、.onVerifyInstDir
卸載邏輯回調(diào)函數(shù)
un.onGUIInit、un.onInit、un.onUninstFailed、un.onUninstSuccess、un.onGUIEnd、un.onRebootFailed、un.onUserAbort
變量
用var關(guān)鍵字來(lái)定義變量,使用$來(lái)引用變量
$INSTDIR
用戶定義的解壓路徑。
$PROGRAMFILES
程序文件目錄(通常為?C:Program Files?但是運(yùn)行時(shí)會(huì)檢測(cè))。
0-?9,?R0?-R9
腳本中定義了寄存器變量0-?9,?R0?-R9用于參數(shù)傳遞,以及系統(tǒng)變量用于特定用途。使用這些參數(shù)應(yīng)該通過(guò)Push和Pop的方式
$STARTMENU
開(kāi)始菜單目錄(常用于添加一個(gè)開(kāi)始菜單項(xiàng),使用 CreateShortCut)。該常量的內(nèi)容(所有用戶或當(dāng)前用戶)取決于SetShellVarContext 設(shè)置。默認(rèn)為當(dāng)前用戶。
$SMPROGRAMS
開(kāi)始菜單程序目錄(當(dāng)你想定位 $STARTMENU程序 時(shí)可以使用它)。該常量的內(nèi)容(所有用戶或當(dāng)前用戶)取決于SetShellVarContext 設(shè)置。默認(rèn)為當(dāng)前用戶。
$SMSTARTUP
開(kāi)始菜單程序/啟動(dòng) 目錄。該常量的內(nèi)容(所有用戶或當(dāng)前用戶)取決于 SetShellVarContext 設(shè)置。默認(rèn)為當(dāng)前用戶。
常用指令
File
作用:釋放文件到當(dāng)前輸出路徑。
如果使用了 /r 開(kāi)關(guān),匹配的文件將會(huì)在子目錄里被遞歸的搜索。
將ProjectFiles目錄下的所有文件釋放到輸出目。
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File /r "ProjectFiles*.*"
Delete
作用:從目標(biāo)系統(tǒng)刪除文件
Delete "$INSTDIR\uninst.exe"
RMDir
作用:刪除目錄
RMDir /r "$INSTDIR\*.*"
SetOutPath
作用:設(shè)置輸出路徑($OUTDIR)且當(dāng)路徑不存在時(shí)創(chuàng)建(需要時(shí)會(huì)遞歸創(chuàng)建)。必須為絕對(duì)路徑名,通常都使用?$INSTDIR。
將用戶定義的解壓路徑作為輸出目錄
SetOutPath $INSTDIR
CreateShortCut
作用:創(chuàng)建快捷文件.lnk?目標(biāo)文件
CreateShortCut "$SMPROGRAMS\PSC_FS\Uninstall.lnk" "$INSTDIR\uninst.exe"
WriteRegStr、WriteRegExpandStr
作用:把字符串寫入注冊(cè)表
根鍵如下:
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
作用:讀取注冊(cè)表信息
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{8d5fdf81-7022-423f-bd8b-b513a1050ae1}" "BundleVersion"
DeleteRegKey
作用:刪除一個(gè)注冊(cè)表鍵。
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
Exec
作用:這應(yīng)該算是常用的命令了,執(zhí)行一個(gè)指定的程序并且立即繼續(xù)安裝,就是直接執(zhí)行一個(gè)程序。
Exec "$INSTDIR\vc_redist.x86.exe ?/q" ??;若不存在,執(zhí)行靜默安裝??/q表示靜默安裝
ExecWait
作用:執(zhí)行一個(gè)指定的程序并且等待運(yùn)行處理結(jié)束。
Exec "$INSTDIR\vc_redist.x86.exe ?/q" ??;若不存在,執(zhí)行靜默安裝??/q表示靜默安裝
RegDLL
作用:載入指定的 DLL 并且調(diào)用 DllRegisterServer (或入口點(diǎn)名稱,當(dāng)指定之后)。其實(shí)就是注冊(cè)或加載你要的插件
!insertmacro
作用:插入宏
通過(guò)宏插入歡迎頁(yè)面
!insertmacro MUI_PAGE_WELCOME
StrCpy
作用:復(fù)制字符串
StrCpy $0 "a bbbbbbbb"
Push
作用:把一個(gè)字串壓入堆棧,該字串可隨后從堆棧里彈出。
Pop
作用:從堆棧里彈出一個(gè)字串到用戶變量?$x。如果堆棧是空的,則會(huì)置一個(gè)錯(cuò)誤標(biāo)記。
Goto
作用:跳轉(zhuǎn)到指定標(biāo)記
IfErrors?
錯(cuò)誤時(shí)跳轉(zhuǎn)到標(biāo)記?
IfErrors 0 VSRedistInstalled
MessageBox
作用:顯示一個(gè)包含“消息框文本”的消息框?!跋⒖蜻x項(xiàng)列表”必須為下面的一個(gè)或多個(gè),多個(gè)使用?|?來(lái)隔開(kāi)。
MB_OK -?顯示?OK?按鈕
MB_OKCANCEL -?顯示?OK?和取消按鈕
MB_ABORTRETRYIGNORE -?顯示退出、重試、忽略按鈕
MB_RETRYCANCEL -?顯示重試和取消按鈕
MB_YESNO -?顯示是和否按鈕
MB_YESNOCANCEL -?顯示是、否、取消按鈕
MB_ICONEXCLAMATION -?顯示驚嘆號(hào)圖標(biāo)
MB_ICONINFORMATION -?顯示信息圖標(biāo)
MB_ICONQUESTION -?顯示問(wèn)號(hào)圖標(biāo)
MB_ICONSTOP -?顯示終止圖標(biāo)
MB_TOPMOST -?使消息框在最前端顯示
MB_SETFOREGROUND -?設(shè)置前景
MB_RIGHT -?右對(duì)齊文本
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 "您確實(shí)要完全移除 $(^Name) ,及其所有的組件?" \
???/SD IDYES \
???IDYES uninstallfinish \
???IDNO ?Abortuninstall
Abortuninstall:
????Abort
uninstallfinish:
???pop $R3
?FunctionEnd
NSIS工具安裝包下載
鏈接:https://pan.baidu.com/s/1ticaAl3T7kp4kJOwSTCxWA?
提取碼:xn2n文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-812269.html
具體制作安裝包的過(guò)程參考:https://www.cnblogs.com/hi-gdl/p/12449912.html文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-812269.html
到了這里,關(guān)于NSIS 安裝windows 安裝包(包括QT和MFC)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!