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 制作自动升级包的更多相关文章
- 制作OTA升级包
OTA 软件包工具 本文地址http://wossoneri.github.io/2018/09/21/%5BAndroid%5D%5BFramework%5Dcreate-ota-update-zi ...
- Hbuider制作app升级包的简单办法 (升级官方提供的案例)
源文档:http://ask.dcloud.net.cn/question/11795 http://ask.dcloud.net.cn/article/199 一.生成移动App资源升级包 5+应用 ...
- 使用NSIS制作可执行程序的安装包
使用NSIS制作可执行程序的安装包: 1,NSIS下载地址:https://pan.baidu.com/s/1GzzQNXgAlJPJWgjBzVwceA 下载完成之后解压缩,打开安装程序,默认安装即 ...
- NSIS制作安装包笔记(一):NSIS介绍、使用NSIS默认向导脚本制作Windows安装包
前言 做产品时,定制的自定义安装界面常有的,使用NSIS + Qt可以完美的定制基于QT的安装界面,先从纯NSIS开始,制作常规的安装包. 应用程序的发布方式 应用程序发布的时候,具备以下 ...
- nsis制作启动Tomcat服务的exe安装包教程
一. 准备工作 下载nsis相关工具包,点击此下载 1. 安装程序:nsis-2.46-setup.exe 2. 编辑程序:cnisedit203.exe 3. 帮助文档:NSIS205帮助文档.ra ...
- NSIS 制作简单安装包
;replace NSIS/Contrib/zip2exe/Modern.nsh;NSI format: Asni;http://nsis.sourceforge.net/ ;UAC级别Request ...
- 使用NSIS制作安装包
nsis下载地址:http://www.pc6.com/softview/SoftView_14342.html nsis使用: 启动NSIS程序主界面,选择“可视化脚本编辑器(VNISEdit)”菜 ...
- iOS 制作自动打包脚本 Xcode8.3.2
本文包含以下内容: 前言 1.shell脚本的编写 2.xcodebuild命令 3.完整的可用示例 参考资料 前言 做iOS开发,打包APP是比较频繁的事情,每次都手动去配置一堆东西确实是比较乏味. ...
- [转]NSIS 制作安装包无法创建桌面快捷方式或无法删除开始菜单项
用户将桌面文件转移了,如: D:\Doc\Desktop ,安装程序后,桌面不会生成快捷方式, 或者卸载后,开始菜单中的文件也不会被删除 NSIS卸载后无法删除开始菜单中的内容原因:因为NSIS中使 ...
随机推荐
- css文字动画(自动换文字)
html: <div class="content"> <div class="content__container"> <p c ...
- Java核心基础第3篇-Java流程控制
Java流程控制 本章一起来探讨下Java的流程控制语句.主要从以下几个方面展开: Java分支语句 Java循环语句 Java其实和其他任何的开发语言一样,分支语句和循环语句是必不可少的,有个这两个 ...
- Linux系统inodes资源耗尽时的查找及删除
for i in {1..10}; do echo $i; ls > $i.log; done for i in $(seq 1 10); do echo $i; done 以上为for循环的使 ...
- [心得]安装MongoDB
1. 安装 (1) 其他默认 (2) 创建文件 在 E:\DevTools\MongoDB\Server\3.4 1 1 E:\DevTools\MongoDB\Server\3.4 下创建dat ...
- buu SCTF Who is he
1. 下载好附件,发现是unity的题目,找到assembly.dll,用dnspy直接打开干,在引用下面就是实际的代码 2.找到了核心代码,发现逻辑也挺简单的, 输入的text,要和一串字符串进行b ...
- 利用 FilesystemIterator 获取指定目录下的所有文件
/** * 获取指定目录下的所有文件 * @param null $path * @return array */ public function getFileByPath($path = null ...
- JS请求节流
少废话,撸代码.欧耶! 1.节流器 // 对函数进行 节流 function throttle (fn, interval = 500) { let timer = null; let firstTi ...
- 「CF576D」 Flights for Regular Customers
「CF576D」 Flights for Regular Customers 对不起我又想网络流去了 你看这长得多像啊,走过至少多少条边就是流量下界,然后没上界 但是这个题求的最少走多少条边啊...完 ...
- Java 获取、删除Word文本框中的表格
本文介绍如何来获取Word文本框中包含的表格,以及删除表格. 程序测试环境包括: IDEA JDK 1.8.0 Spire.Doc.jar 注:jar导入,可通过创建Maven程序项目,并在pom.x ...
- cookie详解(八)
一.什么是cookie 1.大概了解 什么是 Cookie?针对不同用户,做出不同的响应.,这就是Cookie的原理.是浏览器储存在用户的机器上的(可见免用户名登录)1. Cookie翻译过来是饼干的 ...