原文 NSIS:制作软件升级安装包
相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生。在这种情况下,您可能就需要一个软件的升级安装包了。

现在,我们就来一步步把这个安装包做出来。
前提:用户已经使用我们的完整安装包安装过了,且已经在注册表中记录了安装路径。
2 |
WriteRegStr HKCU "Software\轻狂的软件" "" $INSTDIR |
|
我们要实现以下功能:
1、运行时检测注册表中是否有指定的安装路径,如果有,直接进入安装过程,如果没有,给一个提示。
2、运行时检测程序是否运行,如果正在运行则可以选择强制结束。
3、升级过程中实现解压文件、运行BAT等操作,且有进度条提示。
4、升级结束时打开升级说明以便用户查看。
第一步:定义基本框架
07 |
!define PRODUCT_NAME "轻狂的软件" |
08 |
!define PRODUCT_VERSION "1.0.0.1" |
12 |
RequestExecutionLevel admin |
16 |
!insertmacro MUI_LANGUAGE "SimpChinese" |
18 |
Name "${PRODUCT_NAME}_升级_${PRODUCT_VERSION}" |
19 |
OutFile "${PRODUCT_NAME}_升级_${PRODUCT_VERSION}.exe" |
20 |
InstallDirRegKey HKCU "Software\轻狂的软件" "" |
24 |
SetDetailsPrint textonly |
25 |
DetailPrint "正在升级 ${PRODUCT_NAME},请单击关闭按钮完成升级!" |
26 |
SetDetailsPrint listonly |
32 |
File "Server\轻狂的软件.EXE" |
33 |
File "Server\轻狂的软件.bat" |
34 |
File "Server\更新说明.txt" |
36 |
nsExec::Exec "$INSTDIR\轻狂的软件.bat" |
38 |
Exec '"$SYSDIR\notepad.exe" "$INSTDIR\更新说明.txt"' |
|
如果没有其他错误,这时候我们的升级程序就已经可以编译了。
下面,我们继续进行完善。
在.onInit区段加入以下代码
3 |
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "轻狂的软件_installer") i .r1 ?e' |
6 |
MessageBox MB_OK|MB_ICONEXCLAMATION "有一个 ${PRODUCT_NAME} 升级程序已经运行!" |
|
第三步:加入是否安装判断
我们通过检测注册中指定键值的方式来判断软件是否已经正确安装。
在.onInit区段加入以下代码
2 |
ReadRegStr $0 HKCU "Software\轻狂的软件" "" |
4 |
MessageBox MB_OK|MB_ICONEXCLAMATION "您未正确安装轻狂的软件,不能使用此升级程序!" |
|
第四步:如果程序正在运行则关闭程序
在.onInit区段加入以下代码
05 |
ProcessWork::existsprocess |
08 |
MessageBox MB_OKCANCEL|MB_ICONSTOP "升级程序检测到 ${PRODUCT_NAME} 正在运行。$\r$\n$\r$\n点击 “确定” 强制关闭${PRODUCT_NAME},继续升级。$\r$\n点击 “取消” 退出安装程序。" IDCANCEL Exit |
10 |
Processwork::KillProcess |
|
这时我们会发现整个安装程序还不是很美观,那么我们继续。
第五步:添加页眉图片和图标
1 |
!define MUI_ABORTWARNING |
2 |
!define MUI_HEADERIMAGE |
3 |
!define MUI_ICON "Setup\logo.ico" |
4 |
!define MUI_HEADERIMAGE_BITMAP "Setup\modern-header.bmp" |
|
好,至此,这个软件升级包就大功告成了。
当然,你还可以在其中加入其他功能,比如更新卸载文件代码、注册DLL、设置壁纸、更改主题等,不过,轻狂劝你:这只是一个升级安装包而已,没必要搞得功能那么复杂吧!呵呵
- 使用NSIS制作可执行程序的安装包
使用NSIS制作可执行程序的安装包: 1,NSIS下载地址:https://pan.baidu.com/s/1GzzQNXgAlJPJWgjBzVwceA 下载完成之后解压缩,打开安装程序,默认安装即 ...
- 制作linux内核安装包
实验基于Centos 6.2 升级linux内核 直接在一个有编译环境的设备上,编译升级内核很简单. make menuconfig 或者 拷贝现有系统的.config文件 修改.config文件 ...
- IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权
原文:IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权 上一篇: IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权本文经原作者特许授权于海洋女神发布,转载请务必注 ...
- IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权
原文:IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权 上一篇: MyEclipse中消除frame引起的“the file XXX can not be found.Please ...
- Advanced Installer 制作.NetWeb部署安装包
原文:Advanced Installer 制作.NetWeb部署安装包 因为是.Net的Web应用程序,所以想用Advanced Installer 调用Dll实现安装部署. 因为我需要自己定制参数 ...
- 制作iis自动安装包
原文:制作iis自动安装包 MS 一直没有提供可独立安装的 IIS 安装包,Windows 的缺省安装没有安装它,通常要到控制面板的"添加/删除 Windows 程序"中去选择安装 ...
- 用Inno Setup制作WEB程序安装包
原文 用Inno Setup制作WEB程序安装包 最近做了一个WEB程序的安装包,我把制作的过程做个介绍,贴出源码给大家做个参考 看看inno 的脚本 [Setup] AppCopyright=tes ...
- C# 制作Windows服务安装包
C# 制作Windows服务安装包 这两天公司要用C#写一个windows服务,做成安装安装包.制作的过程中遇到了一些问题,写完之后总结一下.如果以后在用到的话可以可以参考一下,而且由于原来没有做 ...
- InstallShield制作升级安装包
1. 在General Information里,修改Product Version为新的版本号,此版本号应大于旧的版本号.点击Product Code右面的{...},获取一个新的Product C ...
随机推荐
- SQL Server无法连接到(local)问题的解决的方法
今天在使用数据库的时候突然发现,SQL Server08竟然连接不上了.问题如图所看到的: 于是在网上搜索了一下这个问题,发现有非常多相似的提问,既然这个问题不是少数人遇到,看来这个问题还是值得研究一 ...
- live555 for Android
因为Live555 包中未提供Android 的config 所以编译器来比較麻烦,须要自己编写Android.mk ,下面是我通过 改动 现有的config文件,在cygwin实现 编译的过程,co ...
- 设计模式——辛格尔顿(Singleton)
要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 单例模式属于设计模式 ...
- SQL Server提高并发查询效率
同事写了个程序用创建多个线程使用ado同时对同个数据库进行相同的查询,涉及2张数据表的联查.当线程数非常多的情况下,读取数据的效率就会变得很慢,例如50个线程同时查询大概3000条数据,查询完成后通过 ...
- GIT用服务器上的版本强制覆盖掉本地的版本(转)
以前在机子上使用git下载了linux git版本库上的源代码,由于在阅读源代码的过程中,难免会对本地的文件进行修改,这样就导致本地文件与服务器上的文件版本不一致,我想做的就是用服务器上的版本强制覆盖 ...
- [Python]How to handle the exception in Python?
This post demonstrates how to use try clause to handle the exceptions def test_exception(case=None): ...
- SQL Server数据库视图
1:什么是视图 2:视图和查询的区别 3:视图的优点 4:如何创建和管理视图 5:如何通过视图修改基本表的数据 6:如何通过视图实现数据的安全性 A:什么是视图: 视图(view):从一个或几个基本表 ...
- CentOS 安装apache 及所需的 apr,apr-util,pcre
安装apache前确定已安装 apr,apr-util,pcre 一.安装apr [root@xt test]# tar -zxf apr-1.4.5.tar.gz [root@xt test]# c ...
- Vim配置说明
使用这些天一直vim,我认为vim这是一个非常强大的编辑器,尤其是后配置. 互联网参考大牛个月vim配置,然后更改加入了一部分,形成了自己的配置.让Vim变的更强大. 详细有下面几个特点: 1.自己主 ...
- 为什么tap事件绑定在document上,而不是对象本身上
1.在移动端前端开发,click事件有300ms的延时,为了提升用户体验,快速响应.zepto添加了tap事件.tap是在手指触屏横纵向移动距离小于30px,触发tap事件.移动距离的判断是通过tou ...