1:首先定義基礎變量
!define PRODUCT_NAME "XXX"//補丁名稱 !define PRODUCT_VERSION "3"//版本號 !define PRODUCT_PUBLISHER "BBB" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\Hymson3.0"//注冊表位置 !define PRODUCT_UNINST_ROOT_KEY "HKLM"
//壓縮方式
SetCompressor lzma
2:引用界面UI並賦值,編寫補丁路徑和是否覆蓋
SetFont "tahome" 8 RequestExecutionLevel admin !include "MUI2.nsh" !insertmacro MUI_LANGUAGE "SimpChinese" Name "${PRODUCT_NAME}_升級_${PRODUCT_VERSION}" OutFile "${PRODUCT_NAME}_升級_${PRODUCT_VERSION}.exe" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Hymson3.0" "DisplayIcon" Section "升級文件" SEC01 SetDetailsPrint textonly DetailPrint "正在升級 ${PRODUCT_NAME},請單擊關閉按鈕完成升級!" SetDetailsPrint listonly SectionIn RO SetOutPath "$INSTDIR" SetOverwrite on File "E:\xx\xx\xx\xx\bin\Debug\xx.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" SectionEnd
3:初始化判斷
;升級文件 Function .onInit FindProcDLL::FindProc "Hymlaser.exe" Pop $R0 IntCmp $R0 1 0 no_run MessageBox MB_ICONSTOP "安裝程序檢測到Hymlaser.exe正在運行,請退出程序后重試" Quit no_run: ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Hymson3.0" "DisplayVersion" StrCmp $0 "" 0 NoAbort MessageBox MB_OK|MB_ICONEXCLAMATION "您未正確安裝Hymson3.0的軟件,不能使用此升級程序!" Abort ;退出安裝程序 NoAbort: ReadRegStr $1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Hymson3.0" "DisplayVersion"//取注冊表鍵值 IntCmp $1 "${PRODUCT_VERSION} " is5 lessthan5 morethan5 is5: DetailPrint "$1 == ${PRODUCT_VERSION} " Goto int lessthan5: DetailPrint "$1 < ${PRODUCT_VERSION} " Goto error2 morethan5: DetailPrint "$1 > ${PRODUCT_VERSION} " Goto error1 int: MessageBox MB_OK "你系統中現有版本為$1,為最新當前補丁最新版本" IDOK Abort DetailPrint "安裝版本為: $1" goto done error1: MessageBox MB_ICONSTOP|MB_OK "你系統中版本$1高於更新版本${PRODUCT_VERSION}" IDOK Abort error2: MessageBox MB_ICONSTOP|MB_OK "你系統中版本$1低於更新版本${PRODUCT_VERSION}" IDOK done: FunctionEnd
補充上面的版本對比只能比較整數在此補充上帶小數點的版本對比
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Hymson3.0" "DisplayVersion" ;PRODUCT_VERSION ;用戶變量(輸出) 根鍵 子鍵 項 ${IF} $0 != "" IntCmp ${PRODUCT_VERSION} $0 0 Old New // 第一個為參數1 第二個為參數2 第三個0代表前2的相減 是否等於0 Old與new 為方法 MessageBox MB_YESNO "安裝程序檢測到 Hymlaser 已經安裝,是否覆蓋安裝" IDYES Y IDNO N N: Quit Old: MessageBox MB_ICONSTOP "安裝程序檢測到 Hymlaser 已經安裝了更新版本" Quit New: MessageBox MB_ICONSTOP "安裝程序檢測到 Hymlaser 已經安裝了舊版本,繼續更新安裝" ${ENDIF} Y: