NSIS:制作软件升级安装包
文章转自王牌软件
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
只回答业务咨询
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生。在这种情况下,您可能就需要一个软件的升级安装包了。
现在,我们就来一步步把这个安装包做出来。
前提:用户已经使用我们的完整安装包安装过了,且已经在注册表中记录了安装路径。
1 2 |
;在注册表中写入安装路径 WriteRegStr HKCU "Software\轻狂的软件" "" $INSTDIR |
我们要实现以下功能:
1、运行时检测注册表中是否有指定的安装路径,如果有,直接进入安装过程,如果没有,给一个提示。
2、运行时检测程序是否运行,如果正在运行则可以选择强制结束。
3、升级过程中实现解压文件、运行BAT等操作,且有进度条提示。
4、升级结束时打开升级说明以便用户查看。
第一步:定义基本框架
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
/* www.flighty.cn 作者:少轻狂 时间2012-11-23 */ !define PRODUCT_NAME "轻狂的软件" !define PRODUCT_VERSION "1.0.0.1" SetCompressor lzma SetFont "tahoma" 8 RequestExecutionLevel admin !include "MUI2.nsh" !insertmacro MUI_LANGUAGE "SimpChinese" Name "${PRODUCT_NAME}_升级_${PRODUCT_VERSION}" OutFile "${PRODUCT_NAME}_升级_${PRODUCT_VERSION}.exe" InstallDirRegKey HKCU "Software\轻狂的软件" "" Section "升级文件" SEC01 SetDetailsPrint textonly DetailPrint "正在升级 ${PRODUCT_NAME},请单击关闭按钮完成升级!" SetDetailsPrint listonly SectionIn RO SetOutPath "$INSTDIR" SetOverwrite ifnewer ;升级文件 File "Server\轻狂的软件.EXE" File "Server\轻狂的软件.bat" File "Server\更新说明.txt" ;运行BTA nsExec::Exec "$INSTDIR\轻狂的软件.bat" ;指定以记事本打开说明 Exec '"$SYSDIR\notepad.exe" "$INSTDIR\更新说明.txt"' SectionEnd |
如果没有其他错误,这时候我们的升级程序就已经可以编译了。
下面,我们继续进行完善。
第二步:禁止重复运行
在.onInit区段加入以下代码
1 2 3 4 5 6 7 |
InitPluginsDir ;创建互斥防止重复运行 System::Call 'kernel32::CreateMutexA(i 0, i 0, t "轻狂的软件_installer") i .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "有一个 ${PRODUCT_NAME} 升级程序已经运行!" Abort |
第三步:加入是否安装判断
我们通过检测注册中指定键值的方式来判断软件是否已经正确安装。
在.onInit区段加入以下代码
1 2 3 4 5 6 |
;判断是否已安装 ReadRegStr $0 HKCU "Software\轻狂的软件" "" StrCmp $0 "" 0 NoAbort MessageBox MB_OK|MB_ICONEXCLAMATION "您未正确安装轻狂的软件,不能使用此升级程序!" Abort ;退出安装程序 NoAbort: |
第四步:如果程序正在运行则关闭程序
在.onInit区段加入以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
;关闭进程 Push $R0 CheckProc: Push "轻狂的软件.exe" ProcessWork::existsprocess Pop $R0 IntCmp $R0 0 Done MessageBox MB_OKCANCEL|MB_ICONSTOP "升级程序检测到 ${PRODUCT_NAME} 正在运行。$\r$\n$\r$\n点击 “确定” 强制关闭${PRODUCT_NAME},继续升级。$\r$\n点击 “取消” 退出安装程序。" IDCANCEL Exit Push "轻狂的软件.exe" Processwork::KillProcess Sleep 1000 Goto CheckProc Exit: Abort Done: Pop $R0 |
这时我们会发现整个安装程序还不是很美观,那么我们继续。
第五步:添加页眉图片和图标
1 2 3 4 |
!define MUI_ABORTWARNING !define MUI_HEADERIMAGE !define MUI_ICON "Setup\logo.ico" !define MUI_HEADERIMAGE_BITMAP "Setup\modern-header.bmp" |
好,至此,这个软件升级包就大功告成了。
当然,你还可以在其中加入其他功能,比如更新卸载文件代码、注册DLL、设置壁纸、更改主题等,不过,轻狂劝你:这只是一个升级安装包而已,没必要搞得功能那么复杂吧!呵呵
学习日记,兼职软件设计,软件修改,毕业设计。
本文出自 学习日记,转载时请注明出处及相应链接。
本文永久链接: https://www.softwareace.cn/?p=1010