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:

 

你可能感兴趣的:(NSIS 制作自动升级包)