杉宫竹苑工作室

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

用 NSIS 制作软件升级安装包,同时关闭主运行程序

[复制链接]
发表于 2017-3-4 15:19:17 | 显示全部楼层 |阅读模式

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

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

x
  1. /* ----------------------------------------------------------------------*/
  2. !define PRODUCT_NAME "产品名称"
  3. !define PRODUCT_VERSION "产品版本号"
  4. !define PRODUCT_PUBLISHER "产品发布者"
  5. !define PRODUCT_DIR_REGKEY "Software/Microsoft/Windows/CurrentVersion/App Paths/产品.exe"
  6. !define PRODUCT_UNINST_KEY "Software/Microsoft/Windwos/CurrentVersion/Uninstall/${PRODUCT_NAME}"

  7. SetCompressor lzma

  8. !include "MUI.nsh"
  9. !include "StrFunc.nsh"
  10. !include "Library.nsh"

  11. !define MUI_ABORTWARING
  12. !define MUI_ICON "../ICON/install.ico" #安装包图标

  13. !define MUI_HEADERIMAGE
  14. !define MUI_HEADERIMAGE_RIGHT
  15. !define MUI_HEADERIMAGE_BITMAP "../ICON/LOGO.bmp" #软件公司、个性图片

  16. !define MUI_WELCOMEPAGE_TITLE "欢迎使用“产品名称”安装向导"
  17. !define MUI_WELCOMEPAGE_TEXT "/r/n这个安装向导将指引你完成“产品名称”的升级安装过程。/r/n/r/n开始安装前,建议先关闭其他所有应用程序。这将允许“升级程序”更新指定的系统软件,而不需要重新启动计算机。/r/n/r/n$_CLICK"

  18. !insertmacro MUI_PAGE_WELCOME

  19. !define MUI_LICENSEPAGE_TEXT_TOP "阅读协议的其余部分,请按<PgDn>向下滚动页面。"
  20. !define MUI_LICENSEPAGE_TEXT_BOTTOM "如果您同意协议中的条款,请选择“接受协议中的条款”并$_CLICK"
  21. !define MUI_LICENSEPAGE_RADIOBUTTONS
  22. !define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT "接受协议中的条款"
  23. !define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE "不接受协议中的条款"

  24. !insertmacro MUI_PAGE_LICENSE "../License.txt"

  25. !insertmacro MUI_PAGE_INSTFILES

  26. !insertmacro MUI_PAGE_FINISH

  27. !insertmacro MUI_LANGUAGE "SimpChinese"

  28. Name "产品名称"
  29. OutFile "upgrade.exe"
  30. InstallDir "$PROGRAMFILES/产品名称"
  31. InstallDirRegKey HKCU "Software/产品名称" "" #读取上篇文章中写入注册表中的程序安装路径信息
  32. ShowInstDetails nevershow
  33. ShowUninstDetails nevershow
  34. BrandingText "NSIS" #安装界面左下角显示的文字,默认是Nullsoft Install System vX.XX

  35. Section -Upgrade

  36.     SetDetailsPrint textonly
  37.     DetailPrint "正在安装必须的程序组件..."
  38.     SetDetailsPrint none

  39.     SetAutoClose true

  40.     SetOutPath $INSTDIR
  41.     File "产品.exe"

  42. SectionEnd

  43. /* ----------------------------------------------------------------------*/
复制代码


程序升级顺序我认为应该是:
1. 如果需要升级的程序正在运行,Kill掉它;
2.开始进行升级(当然,这过程包括很多内容,比如部署新的DLL,新的数据表 etc...);
3.升级结束,重新启动程序。

  1. !define PRODUCT_NAME "产品名称"
  2. !define PRODUCT_VERSION "产品版本号"
  3. !define PRODUCT_PUBLISHER "产品发布者"
  4. !define PRODUCT_DIR_REGKEY "Software/Microsoft/Windows/CurrentVersion/App Paths/产品.exe"
  5. !define PRODUCT_UNINST_KEY "Software/Microsoft/Windwos/CurrentVersion/Uninstall/${PRODUCT_NAME}"

  6. SetCompressor lzma

  7. !include "MUI.nsh"
  8. !include "StrFunc.nsh"
  9. !include "Library.nsh"

  10. !define MUI_ABORTWARING
  11. !define MUI_ICON "../ICON/install.ico" #安装包图标

  12. !define MUI_HEADERIMAGE
  13. !define MUI_HEADERIMAGE_RIGHT
  14. !define MUI_HEADERIMAGE_BITMAP "../ICON/LOGO.bmp" #软件公司、个性图片

  15. !define MUI_WELCOMEPAGE_TITLE "欢迎使用“产品名称”安装向导"
  16. !define MUI_WELCOMEPAGE_TEXT "/r/n这个安装向导将指引你完成“产品名称”的升级安装过程。/r/n/r/n开始安装前,建议先关闭其他所有应用程序。这将允许“升级程序”更新指定的系统问件,而不需要重新启动计算机。/r/n/r/n$_CLICK"

  17. !insertmacro MUI_PAGE_WELCOME

  18. !define MUI_LICENSEPAGE_TEXT_TOP "阅读协议的其余部分,请按<PgDn>往下滚动页面。"
  19. !define MUI_LICENSEPAGE_TEXT_BOTTOM "如果您同意协议中的条款,请选择“接受协议中的条款”并$_CLICK"
  20. !define MUI_LICENSEPAGE_RADIOBUTTONS
  21. !define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT "接受协议中的条款"
  22. !define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE "不接受协议中的条款"

  23. !insertmacro MUI_PAGE_LICENSE "../License.txt"

  24. !insertmacro MUI_PAGE_INSTFILES

  25. #===新增内容===
  26. !insertmacro MUI_FINISHPAGE_RUN
  27. !insertmacro MUI_FINISHPAGE_RUN_TEXT "运行<产品>"
  28. !insertmacro MUI_FINISHPAGE_RUN_FUNCTION "LaunchExecutableFile"
  29. #==============
  30. # 这里的功能是在升级结束时调用程序
  31. #==============
  32. !insertmacro MUI_PAGE_FINISH

  33. !insertmacro MUI_LANGUAGE "SimpChinese"

  34. Name "产品名称"
  35. OutFile "upgrade.exe"
  36. InstallDir "$PROGRAMFILES/产品名称"
  37. InstallDirRegKey HKCU "Software/产品名称" "" #读取上篇文章中写入注册表中的程序安装路径信息
  38. ShowInstDetails nevershow
  39. ShowUninstDetails nevershow
  40. BrandingText "NSIS" #安装界面左下角显示的文字,默认是Nullsoft Install System vX.XX

  41. Section -Upgrade
  42.     SetDetailsPrint textonly
  43.     DetailPrint "正在安装必须的程序组件..."
  44.     SetDetailsPrint none

  45.     SetAutoClose true

  46.     SetOutPath $INSTDIR
  47.     File "产品.exe"
  48. SectionEnd

  49. #===新增函数===
  50. #==============
  51. # 初始化程序时Kill掉程序,如果程序在运行.
  52. # NSIS本身并没有提供杀死正在运行程序的功能,所以我们需要调用第三方控件。
  53. # 刚好有高人提供了一个C++的DLL,在初始化函数中引用它。
  54. #==============
  55. Function .onInit
  56. Processes::KillProcess "产品" #这里只需要写程序名,不用带".exe"
  57. StrCmp $R0 "1" Oh_KillIt Em_ItStillLive

  58. Oh_KillIt:
  59.   Pop $R0
  60. Em_ItStillLive:
  61.   Pop $R0
  62. End Function

  63. #==============
  64. # 升级结束时启动程序
  65. #==============
  66. Function LaunchExecutableFile
  67.   ExecShell "" "$PROGRAMFILES/产品名称/产品.exe"
  68. End Function
复制代码


结束了程序,最后说一下那个杀死进程的文件。
你需要把它解压缩,然后拷贝到你安装NSIS程序的<Plugins>文件夹下。
Processes.zip (39.67 KB, 下载次数: 0)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 10:53 , Processed in 0.124431 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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