设为首页 | 收藏本页
登陆您的帐号 | 免费注册帐号
全部栏目 > 计算机 > 软件 > 嵌入式软件
下一篇上一篇

制作软件升级安装包


等级:
文章:1|2
注册:2020-06-04
商号:未登记
信誉:查看资质
发布人:zyc
发布日期:2015-06-11 16:35:38
刷新日期:2015-06-11 16:43:57
回复或评论:0
阅览:536
信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生。在这种情况下,您可能就需要一个软件的升级安装包了。

现在,我们就来一步步把这个安装包做出来。
前提:用户已经使用我们的完整安装包安装过了,且已经在注册表中记录了安装路径。


1;在注册表中写入安装路径
2WriteRegStr HKCU "Software满划算的软件" "" $INSTDIR


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

第一步:定义基本框架

01/*
02www.ff87.com
03作者:ff87
04时间2012-11-23
05*/
06 
07!define PRODUCT_NAME "ff87的软件"
08!define PRODUCT_VERSION "1.0.0.1"
09 
10SetCompressor lzma
11SetFont "tahoma" 8
12RequestExecutionLevel admin
13 
14!include "MUI2.nsh"
15 
16!insertmacro MUI_LANGUAGE "SimpChinese"
17 
18Name "${PRODUCT_NAME}_升级_${PRODUCT_VERSION}"
19OutFile "${PRODUCT_NAME}_升级_${PRODUCT_VERSION}.exe"
20InstallDirRegKey HKCU "Softwareff87的软件" ""
21 
22Section "升级文件" 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 "Serverff87的软件.EXE"
33  File "Serverff87的软件.bat"
34  File "Server更新说明.txt"
35  ;运行BTA
36  nsExec::Exec "$INSTDIRff87的软件.bat"
37  ;指定以记事本打开说明
38  Exec '"$SYSDIRnotepad.exe" "$INSTDIR更新说明.txt"'
39 
40SectionEnd

如果没有其他错误,这时候我们的升级程序就已经可以编译了。
下面,我们继续进行完善。
二步:禁止重复运行
在.onInit区段加入以下代码


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



第三步:加入是否安装判断
我们通过检测注册中指定键值的方式来判断软件是否已经正确安装。
在.onInit区段加入以下代码

1;判断是否已安装
2ReadRegStr $0 HKCU "Software轻狂的软件" ""
3StrCmp $0 "" 0 NoAbort
4  MessageBox MB_OK|MB_ICONEXCLAMATION "您未正确安装轻狂的软件,不能使用此升级程序!"
5  Abort ;退出安装程序
6NoAbort:


第四步:如果程序正在运行则关闭程序
在.onInit区段加入以下代码

01;关闭进程
02Push $R0
03CheckProc:
04  Push "ff87的软件.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 "ff87的软件.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 "Setuplogo.ico"
4!define MUI_HEADERIMAGE_BITMAP "Setupmodern-header.bmp"


好,至此,这个软件升级包就大功告成了。
当然,你还可以在其中加入其他功能,比如更新卸载文件代码、注册DLL、设置壁纸、更改主题等,不过,ff87劝你:这只是一个升级安装包而已,没必要搞得功能那么复杂吧!呵呵
评论(0) 暂无回帖


打印 收藏 关闭窗口 下一篇上一篇