NSIS 安裝指令碼常用功能整理
阿新 • • 發佈:2020-11-03
僅允許一個安裝例項執行
!define PRODUCT_NAME "你的產品名稱" ; …… # 檢查是否已啟動安裝程式,同時只能執行一個安裝程式 Function CheckMutexInstance System::Call 'kernel32::CreateMutexA(i0, i0, t"${PRODUCT_NAME}.exe")?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "安裝程式已經在執行。" Abort FunctionEnd Function .onInit # …… Call CheckMutexInstance # …… FunctionEnd
在初始化的函式裡呼叫了CheckMutexInstance函式,該函式會呼叫系統api建立例項,可根據此返回值判斷控制僅允許執行一個例項。
限制同一臺機器僅能安裝一個產品,不允許安裝多個
通過在安裝的時候寫入登錄檔,然後在安裝的初始化函式中讀取該登錄檔項,如果讀取到該項,則說明已經安裝過,給出提示即可。
!define PRODUCT_NAME "你的產品名稱" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe" # 登錄檔操作 Section-Post ; …… WriteRegDword HKLM "${PRODUCT_DIR_REGKEY}" "Installed" 1 ; …… SectionEnd #檢查是否已經安裝了該程式,只能安裝一個 Function CheckOnlyOneInstalled ReadRegDWORD $0 HKLM '${PRODUCT_DIR_REGKEY}' "Installed" IntCmp $0 +1 +4 MessageBox MB_OK|MB_USERICON '$(^Name) 已安裝在計算機中。如需重新安裝,請先解除安裝已有的安裝。'Quit nop FunctionEnd Function .onInit ; …… Call CheckOnlyOneInstalled ; …… FunctionEnd
解除安裝前彈出確認解除安裝對話方塊,確認後再解除安裝
nsis提供了解除安裝的初始化函式,直接在這個函式中給出提示,當用戶點選取消是退出即可。
Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您確實要完全移除 $(^Name) ,及其所有的元件?" IDYES +2 Abort FunctionEnd