NSIS:制作软件升级安装包

系统 2175 0

原文 NSIS:制作软件升级安装包

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

NSIS:制作软件升级安装包

 
现在,我们就来一步步把这个安装包做出来。
 
前提:用户已经使用我们的完整安装包安装过了,且已经在注册表中记录了安装路径。
 
1 ;在注册表中写入安装路径
2 WriteRegStr HKCU   "Software\轻狂的软件"   ""   $INSTDIR


 
我们要实现以下功能:
1、运行时检测注册表中是否有指定的安装路径,如果有,直接进入安装过程,如果没有,给一个提示。
2、运行时检测程序是否运行,如果正在运行则可以选择强制结束。
3、升级过程中实现解压文件、运行BAT等操作,且有进度条提示。
4、升级结束时打开升级说明以便用户查看。



第一步:定义基本框架

01 /*
02 www.flighty.cn
03 作者:少轻狂
04 时间2012-11-23
05 */
06  
07 !define PRODUCT_NAME   "轻狂的软件"
08 !define PRODUCT_VERSION   "1.0.0.1"
09  
10 SetCompressor lzma
11 SetFont   "tahoma"   8
12 RequestExecutionLevel admin
13  
14 !include   "MUI2.nsh"
15  
16 !insertmacro MUI_LANGUAGE   "SimpChinese"
17  
18 Name   "${PRODUCT_NAME}_升级_${PRODUCT_VERSION}"
19 OutFile   "${PRODUCT_NAME}_升级_${PRODUCT_VERSION}.exe"
20 InstallDirRegKey HKCU   "Software\轻狂的软件"   ""
21  
22 Section   "升级文件"   SEC01
23  
24    SetDetailsPrint textonly
25    DetailPrint   "正在升级 ${PRODUCT_NAME},请单击关闭按钮完成升级!"
26    SetDetailsPrint listonly
27  
28    SectionIn RO
29    SetOutPath   "$INSTDIR"
30    SetOverwrite ifnewer
31    ;升级文件
32    File   "Server\轻狂的软件.EXE"
33    File   "Server\轻狂的软件.bat"
34    File   "Server\更新说明.txt"
35    ;运行BTA
36    nsExec::Exec   "$INSTDIR\轻狂的软件.bat"
37    ;指定以记事本打开说明
38    Exec   '"$SYSDIR\notepad.exe" "$INSTDIR\更新说明.txt"'
39  
40 SectionEnd
 
如果没有其他错误,这时候我们的升级程序就已经可以编译了。
 
下面,我们继续进行完善。
 


二步:禁止重复运行

在.onInit区段加入以下代码
 
1 InitPluginsDir
2    ;创建互斥防止重复运行
3    System::Call   'kernel32::CreateMutexA(i 0, i 0, t "轻狂的软件_installer") i .r1 ?e'
4    Pop $R0
5    StrCmp $R0 0 +3
6      MessageBox MB_OK|MB_ICONEXCLAMATION   "有一个 ${PRODUCT_NAME} 升级程序已经运行!"
7      Abort
 


第三步:加入是否安装判断
 
我们通过检测注册中指定键值的方式来判断软件是否已经正确安装。
 
在.onInit区段加入以下代码
 
1 ;判断是否已安装
2 ReadRegStr $0 HKCU   "Software\轻狂的软件"   ""
3 StrCmp $0   ""   0 NoAbort
4    MessageBox MB_OK|MB_ICONEXCLAMATION   "您未正确安装轻狂的软件,不能使用此升级程序!"
5    Abort ;退出安装程序
6 NoAbort:
 


第四步:如果程序正在运行则关闭程序
 
在.onInit区段加入以下代码
 
01 ;关闭进程
02 Push $R0
03 CheckProc:
04    Push   "轻狂的软件.exe"
05    ProcessWork::existsprocess
06    Pop $R0
07    IntCmp $R0 0 Done
08    MessageBox MB_OKCANCEL|MB_ICONSTOP   "升级程序检测到 ${PRODUCT_NAME} 正在运行。$\r$\n$\r$\n点击 “确定” 强制关闭${PRODUCT_NAME},继续升级。$\r$\n点击 “取消” 退出安装程序。"   IDCANCEL Exit
09    Push   "轻狂的软件.exe"
10    Processwork::KillProcess
11    Sleep 1000
12    Goto CheckProc
13    Exit:
14    Abort
15    Done:
16    Pop $R0
 
这时我们会发现整个安装程序还不是很美观,那么我们继续。
 


第五步:添加页眉图片和图标
 
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:制作软件升级安装包


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论