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 制作自动升级包的更多相关文章

  1. 制作OTA升级包

    OTA 软件包工具 本文地址http://wossoneri.github.io/2018/09/21/%5BAndroid%5D%5BFramework%5Dcreate-ota-update-zi ...

  2. Hbuider制作app升级包的简单办法 (升级官方提供的案例)

    源文档:http://ask.dcloud.net.cn/question/11795 http://ask.dcloud.net.cn/article/199 一.生成移动App资源升级包 5+应用 ...

  3. 使用NSIS制作可执行程序的安装包

    使用NSIS制作可执行程序的安装包: 1,NSIS下载地址:https://pan.baidu.com/s/1GzzQNXgAlJPJWgjBzVwceA 下载完成之后解压缩,打开安装程序,默认安装即 ...

  4. NSIS制作安装包笔记(一):NSIS介绍、使用NSIS默认向导脚本制作Windows安装包

    前言   做产品时,定制的自定义安装界面常有的,使用NSIS + Qt可以完美的定制基于QT的安装界面,先从纯NSIS开始,制作常规的安装包.   应用程序的发布方式   应用程序发布的时候,具备以下 ...

  5. nsis制作启动Tomcat服务的exe安装包教程

    一. 准备工作 下载nsis相关工具包,点击此下载 1. 安装程序:nsis-2.46-setup.exe 2. 编辑程序:cnisedit203.exe 3. 帮助文档:NSIS205帮助文档.ra ...

  6. NSIS 制作简单安装包

    ;replace NSIS/Contrib/zip2exe/Modern.nsh;NSI format: Asni;http://nsis.sourceforge.net/ ;UAC级别Request ...

  7. 使用NSIS制作安装包

    nsis下载地址:http://www.pc6.com/softview/SoftView_14342.html nsis使用: 启动NSIS程序主界面,选择“可视化脚本编辑器(VNISEdit)”菜 ...

  8. iOS 制作自动打包脚本 Xcode8.3.2

    本文包含以下内容: 前言 1.shell脚本的编写 2.xcodebuild命令 3.完整的可用示例 参考资料 前言 做iOS开发,打包APP是比较频繁的事情,每次都手动去配置一堆东西确实是比较乏味. ...

  9. [转]NSIS 制作安装包无法创建桌面快捷方式或无法删除开始菜单项

    用户将桌面文件转移了,如: D:\Doc\Desktop  ,安装程序后,桌面不会生成快捷方式, 或者卸载后,开始菜单中的文件也不会被删除 NSIS卸载后无法删除开始菜单中的内容原因:因为NSIS中使 ...

随机推荐

  1. Gym 101334E dp

    分析: 这一题给出的遍历的点的序列,不是树的中序遍历,前序遍历,只要遇到一个节点就打印一个节点.关键点就在,这个序列的首字母和尾字母一定要相同,因为最终都会回到根节点,那么每一个子树也一样. 状态: ...

  2. Springboot:Springboot+Swagger2集成服务

    Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服务 ...

  3. SpringBoot:SpringBoot项目中 HttpServletRequest ServletInputStream 读取不到文件数据流

    在Springboot程序启动后,会默认添加OrderedCharacterEncodingFilter和HiddenHttpMethodFilter过滤器.在HiddenHttpMethodFilt ...

  4. php mkdir 创建多级目录以及修改权限

    mkdir() 用法:mkdir($path,0777,true); 第一个参数:必须,代表要创建的多级目录的路径:第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访问权:注意:mode ...

  5. 解决数据库连接池连接mysql时,每隔8小时mysql自动断开所有连接的问题

    解决数据库连接池连接mysql时,每隔8小时mysql自动断开所有连接的问题 最近有个问题非常讨厌,我们的工程中使用自己的连接池连接mysql数据库,可mysql数据库每隔8小时就会自动断开所有链接, ...

  6. Codeforces Round #732 (Div. 2)【ABCD】

    比赛链接:https://codeforces.com/contest/1546 A. AquaMoon and Two Arrays 题意 给出两个大小为 \(n\) 的数组 \(a, b\) ,每 ...

  7. C#版Nebula客户端编译

    一.需求背景 从Nebula的Github上可以发现,Nebula为以下语言提供了客户端SDK: nebula-cpp nebula-java nebula-go nebula-python nebu ...

  8. MAC系统如果碰到报错信息:sudo:command not found

    ** 一般要考虑最近是否有别人或者自己修改过环境变量,这种报错往往是因为环境变量设置错误导致的. ** 1. 首先要获得创建,或者是打开bash_profile的权限,请在命令行中输入: export ...

  9. java03类与对象相关问题

    1.使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向他查询"你已经创建了几个对象" 1 package 第四五周; 2 3 public ...

  10. RPC远程协议之原理分析

    在近几年工作中发现,功能服务化或微服务化越来越流行,逐渐成为实现中大型分布式系统架构的主要方式,而在分布式系统中的不同节点应用间的通信中,RPC远程协议扮演关键作用.实际上,在日常工作中,我们也多多少 ...