• NSIS 制作自动升级包


    1:首先定义基础变量

    !define PRODUCT_NAME "XXX"//补丁名称
    !define PRODUCT_VERSION "3"//版本号
    !define PRODUCT_PUBLISHER "BBB"
    !define PRODUCT_UNINST_KEY "SoftwareMicrosoftWindowsCurrentVersionUninstallHymson3.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  "SoftwareMicrosoftWindowsCurrentVersionUninstallHymson3.0" "DisplayIcon"
    
    Section "升级文件" SEC01
     SetDetailsPrint textonly
    DetailPrint "正在升级 ${PRODUCT_NAME},请单击关闭按钮完成升级!"
    SetDetailsPrint listonly
    SectionIn RO
    SetOutPath "$INSTDIR"
    SetOverwrite on
    File "E:xxxxxxxxinDebugxx.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  "SoftwareMicrosoftWindowsCurrentVersionUninstallHymson3.0" "DisplayVersion"
    StrCmp $0 "" 0 NoAbort
      MessageBox MB_OK|MB_ICONEXCLAMATION "您未正确安装Hymson3.0的软件,不能使用此升级程序!"
      Abort ;退出安装程序
      NoAbort:
    
      ReadRegStr $1 HKLM  "SoftwareMicrosoftWindowsCurrentVersionUninstallHymson3.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 "SoftwareMicrosoftWindowsCurrentVersionUninstallHymson3.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:
  • 相关阅读:
    MaxScript 计算执行时间差
    MaxScript 几种类GUID的生成方法
    MaxScript 防坑规范指南
    样式测试
    设置.MAX文件程序关联
    Python相关网站(持续更新)
    Python程序使用cx_freeze打包(报错)
    Python对Excel的操作(模块win32com)
    Python对Excel的操作(模块xlrd)
    python模块安装
  • 原文地址:https://www.cnblogs.com/zt199510/p/12720011.html
Copyright © 2020-2023  润新知