zoukankan      html  css  js  c++  java
  • 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:
  • 相关阅读:
    xmind 8 readme
    【08】英语词汇速记大全1词根词缀记忆法
    【20180312】2018年03月12日(随想)
    大佬说
    github私有库购买信息
    【01】用构造器创建函数中的小知识
    【01】魔芋使用MDN的一点点经验
    10.12 telnet:远程登录主机
    10.11 arping:发送arp请求
    10.10 traceroute:追踪数据传输路由状况
  • 原文地址:https://www.cnblogs.com/zt199510/p/12720011.html
Copyright © 2011-2022 走看看