杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2018|回复: 0

NSIS:制作软件升级安装包

[复制链接]
发表于 2015-2-3 22:27:38 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

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



现在,我们就来一步步把这个安装包做出来。

前提:用户已经使用我们的完整安装包安装过了,且已经在注册表中记录了安装路径。
  1. ;在注册表中写入安装路径
  2. WriteRegStr HKCU "Software轻狂的软件" "" $INSTDIR
复制代码
我们要实现以下功能:
1、运行时检测注册表中是否有指定的安装路径,如果有,直接进入安装过程,如果没有,给一个提示。
2、运行时检测程序是否运行,如果正在运行则可以选择强制结束。
3、升级过程中实现解压文件、运行BAT等操作,且有进度条提示。
4、升级结束时打开升级说明以便用户查看。



第一步:定义基本框架

  1. /*
  2. www.flighty.cn
  3. 作者:少轻狂
  4. 时间2012-11-23
  5. */

  6. !define PRODUCT_NAME "轻狂的软件"
  7. !define PRODUCT_VERSION "1.0.0.1"

  8. SetCompressor lzma
  9. SetFont "tahoma" 8
  10. RequestExecutionLevel admin

  11. !include "MUI2.nsh"

  12. !insertmacro MUI_LANGUAGE "SimpChinese"

  13. Name "${PRODUCT_NAME}_升级_${PRODUCT_VERSION}"
  14. OutFile "${PRODUCT_NAME}_升级_${PRODUCT_VERSION}.exe"
  15. InstallDirRegKey HKCU "Software轻狂的软件" ""

  16. Section "升级文件" SEC01

  17.   SetDetailsPrint textonly
  18.   DetailPrint "正在升级 ${PRODUCT_NAME},请单击关闭按钮完成升级!"
  19.   SetDetailsPrint listonly

  20.   SectionIn RO
  21.   SetOutPath "$INSTDIR"
  22.   SetOverwrite ifnewer
  23.   ;升级文件
  24.   File "Server轻狂的软件.EXE"
  25.   File "Server轻狂的软件.bat"
  26.   File "Server更新说明.txt"
  27.   ;运行BTA
  28.   nsExec::Exec "$INSTDIR轻狂的软件.bat"
  29.   ;指定以记事本打开说明
  30.   Exec '"$SYSDIRotepad.exe" "$INSTDIR更新说明.txt"'

  31. 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区段加入以下代码

  1. ;关闭进程
  2. Push $R0
  3. CheckProc:
  4.   Push "轻狂的软件.exe"
  5.   ProcessWork::existsprocess
  6.   Pop $R0
  7.   IntCmp $R0 0 Done
  8.   MessageBox MB_OKCANCEL|MB_ICONSTOP "升级程序检测到 ${PRODUCT_NAME} 正在运行。$点击 “确定” 强制关闭${PRODUCT_NAME},继续升级。$点击 “取消” 退出安装程序。" IDCANCEL Exit
  9.   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 "Setuplogo.ico"
  4. !define MUI_HEADERIMAGE_BITMAP "Setupmodern-header.bmp"
复制代码
[code]

好,至此,这个软件升级包就大功告成了。

当然,你还可以在其中加入其他功能,比如更新卸载文件代码、注册DLL、设置壁纸、更改主题等,不过,轻狂劝你:这只是一个升级安装包而已,没必要搞得功能那么复杂吧!呵呵


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-15 22:15 , Processed in 0.123664 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表