NSIS 制作自動升級包


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:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM