原文 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、设置壁纸、更改主题等,不过,轻狂劝你:这只是一个升级安装包而已,没必要搞得功能那么复杂吧!呵呵
最新文章
- VM VirtualBox 安装 Android 4.3虚拟机完整教程
- 366. Find Leaves of Binary Tree
- python 读写文件
- MVC5 + EF6 入门完整教程二
- css省略号
- 查看APP用到的图片方法
- How to include cascading style sheets (CSS) in JSF
- iOS开发——适配篇&;App适配简单概括
- WebGIS基础复习笔记
- Nagios设置只监控不报警
- JDK动态代理机制
- linux下mysql root密码忘记修改方法
- Python学习_02_数字和运算
- ●BZOJ 2251 [2010Beijing Wc]外星联络
- 《java入门第一季》之面向对象(匿名内部类)
- SpringCloud-Eureka服务注册与发现(二)
- vert.x 学习笔记
- 四.js 正则表达式
- thymeleaf学习笔记:总结
- php网页上传文件到Ubuntu服务器(input type=fire)- 赖大大
热门文章
- hihocoder第41周 骨牌覆盖(矩阵快速幂)
- jdk并发包 CopyOnWriteArrayList源代码分析
- Java对于私有变量“反思暴力”技术
- Three.js 3D打印数据模型文件(.STL)载入中
- 使用dom4j创建和解析xml
- MVC json
- SQLite Code配置DbConfiguration
- javaweb学习总结(七)——HttpServletResponse对象(一)(转)
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(二)
- [转载] 创建为ClickOnce清单签名的.pfx格式数字证书