[NSIS] 用NSIS做一个软件升级安装包--加强版
2007-12-06 16:15
337 查看
很久没来了,时间很快,一年就这样匆匆走过。
希望战斗在和电脑有关的工作岗位的同志们一切顺利。
奇怪的一年,变化好大,当然这里不是发牢骚的地方。:')
这篇讲一下程序升级安装包制作的一些新改进。
可能有牛人认为这不值一提,但我希望能给那些不知道的人一点帮助。
助人乃快乐之本。 :D
程序升级顺序我认为应该是:
1. 如果需要升级的程序正在运行,Kill掉它;
2.开始进行升级(当然,这过程包括很多内容,比如部署新的DLL,新的数据表 etc...);
3.升级结束,重新启动程序。
这是上一篇《用NSIS做一个软件升级安装包》中使用到的例子,现在在这个例子的基础上增加改进的内容。
!define PRODUCT_NAME "产品名称"
!define PRODUCT_VERSION "产品版本号"
!define PRODUCT_PUBLISHER "产品发布者"
!define PRODUCT_DIR_REGKEY "Software/Microsoft/Windows/CurrentVersion/App Paths/产品.exe"
!define PRODUCT_UNINST_KEY "Software/Microsoft/Windwos/CurrentVersion/Uninstall/${PRODUCT_NAME}"
SetCompressor lzma
!include "MUI.nsh"
!include "StrFunc.nsh"
!include "Library.nsh"
!define MUI_ABORTWARING
!define MUI_ICON "../ICON/install.ico" #安装包图标
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_RIGHT
!define MUI_HEADERIMAGE_BITMAP "../ICON/LOGO.bmp" #软件公司、个性图片
!define MUI_WELCOMEPAGE_TITLE "欢迎使用“产品名称”安装向导"
!define MUI_WELCOMEPAGE_TEXT "/r/n这个安装向导将指引你完成“产品名称”的升级安装过程。/r/n/r/n开始安装前,建议先关闭其他所有应用程序。这将允许“升级程序”更新指定的系统问件,而不需要重新启动计算机。/r/n/r/n$_CLICK"
!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_TEXT_TOP "阅读协议的其余部分,请按<PgDn>往下滚动页面。"
!define MUI_LICENSEPAGE_TEXT_BOTTOM "如果您同意协议中的条款,请选择“接受协议中的条款”并$_CLICK"
!define MUI_LICENSEPAGE_RADIOBUTTONS
!define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT "接受协议中的条款"
!define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE "不接受协议中的条款"
!insertmacro MUI_PAGE_LICENSE "../License.txt"
!insertmacro MUI_PAGE_INSTFILES
#===新增内容===
!insertmacro MUI_FINISHPAGE_RUN
!insertmacro MUI_FINISHPAGE_RUN_TEXT "运行<产品>"
!insertmacro MUI_FINISHPAGE_RUN_FUNCTION "LaunchExecutableFile"
#==============
# 这里的功能是在升级结束时调用程序
#==============
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "SimpChinese"
Name "产品名称"
OutFile "upgrade.exe"
InstallDir "$PROGRAMFILES/产品名称"
InstallDirRegKey HKCU "Software/产品名称" "" #读取上篇文章中写入注册表中的程序安装路径信息
ShowInstDetails nevershow
ShowUninstDetails nevershow
BrandingText "NSIS" #安装界面左下角显示的文字,默认是Nullsoft Install System vX.XX
Section -Upgrade
SetDetailsPrint textonly
DetailPrint "正在安装必须的程序组件..."
SetDetailsPrint none
SetAutoClose true
SetOutPath $INSTDIR
File "产品.exe"
SectionEnd
#===新增函数===
#==============
# 初始化程序时Kill掉程序,如果程序在运行.
# NSIS本身并没有提供杀死正在运行程序的功能,所以我们需要调用第三方控件。
# 刚好有高人提供了一个C++的DLL,在初始化函数中引用它。
#==============
Function .onInit
Processes::KillProcess "产品" #这里只需要写程序名,不用带".exe"
StrCmp $R0 "1" Oh_KillIt Em_ItStillLive
Oh_KillIt:
Pop $R0
Em_ItStillLive:
Pop $R0
End Function
#==============
# 升级结束时启动程序
#==============
Function LaunchExecutableFile
ExecShell "" "$PROGRAMFILES/产品名称/产品.exe"
End Function
结束了程序,最后说一下那个杀死进程的文件。
你需要把它解压缩,然后拷贝到你安装NSIS程序的<Plugins>文件夹下。
Kill Processes download link: http://nsis.sourceforge.net/mediawiki/images/f/f3/Processes.zip
再见了,2007~~
希望战斗在和电脑有关的工作岗位的同志们一切顺利。
奇怪的一年,变化好大,当然这里不是发牢骚的地方。:')
这篇讲一下程序升级安装包制作的一些新改进。
可能有牛人认为这不值一提,但我希望能给那些不知道的人一点帮助。
助人乃快乐之本。 :D
程序升级顺序我认为应该是:
1. 如果需要升级的程序正在运行,Kill掉它;
2.开始进行升级(当然,这过程包括很多内容,比如部署新的DLL,新的数据表 etc...);
3.升级结束,重新启动程序。
这是上一篇《用NSIS做一个软件升级安装包》中使用到的例子,现在在这个例子的基础上增加改进的内容。
!define PRODUCT_NAME "产品名称"
!define PRODUCT_VERSION "产品版本号"
!define PRODUCT_PUBLISHER "产品发布者"
!define PRODUCT_DIR_REGKEY "Software/Microsoft/Windows/CurrentVersion/App Paths/产品.exe"
!define PRODUCT_UNINST_KEY "Software/Microsoft/Windwos/CurrentVersion/Uninstall/${PRODUCT_NAME}"
SetCompressor lzma
!include "MUI.nsh"
!include "StrFunc.nsh"
!include "Library.nsh"
!define MUI_ABORTWARING
!define MUI_ICON "../ICON/install.ico" #安装包图标
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_RIGHT
!define MUI_HEADERIMAGE_BITMAP "../ICON/LOGO.bmp" #软件公司、个性图片
!define MUI_WELCOMEPAGE_TITLE "欢迎使用“产品名称”安装向导"
!define MUI_WELCOMEPAGE_TEXT "/r/n这个安装向导将指引你完成“产品名称”的升级安装过程。/r/n/r/n开始安装前,建议先关闭其他所有应用程序。这将允许“升级程序”更新指定的系统问件,而不需要重新启动计算机。/r/n/r/n$_CLICK"
!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_TEXT_TOP "阅读协议的其余部分,请按<PgDn>往下滚动页面。"
!define MUI_LICENSEPAGE_TEXT_BOTTOM "如果您同意协议中的条款,请选择“接受协议中的条款”并$_CLICK"
!define MUI_LICENSEPAGE_RADIOBUTTONS
!define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT "接受协议中的条款"
!define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE "不接受协议中的条款"
!insertmacro MUI_PAGE_LICENSE "../License.txt"
!insertmacro MUI_PAGE_INSTFILES
#===新增内容===
!insertmacro MUI_FINISHPAGE_RUN
!insertmacro MUI_FINISHPAGE_RUN_TEXT "运行<产品>"
!insertmacro MUI_FINISHPAGE_RUN_FUNCTION "LaunchExecutableFile"
#==============
# 这里的功能是在升级结束时调用程序
#==============
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "SimpChinese"
Name "产品名称"
OutFile "upgrade.exe"
InstallDir "$PROGRAMFILES/产品名称"
InstallDirRegKey HKCU "Software/产品名称" "" #读取上篇文章中写入注册表中的程序安装路径信息
ShowInstDetails nevershow
ShowUninstDetails nevershow
BrandingText "NSIS" #安装界面左下角显示的文字,默认是Nullsoft Install System vX.XX
Section -Upgrade
SetDetailsPrint textonly
DetailPrint "正在安装必须的程序组件..."
SetDetailsPrint none
SetAutoClose true
SetOutPath $INSTDIR
File "产品.exe"
SectionEnd
#===新增函数===
#==============
# 初始化程序时Kill掉程序,如果程序在运行.
# NSIS本身并没有提供杀死正在运行程序的功能,所以我们需要调用第三方控件。
# 刚好有高人提供了一个C++的DLL,在初始化函数中引用它。
#==============
Function .onInit
Processes::KillProcess "产品" #这里只需要写程序名,不用带".exe"
StrCmp $R0 "1" Oh_KillIt Em_ItStillLive
Oh_KillIt:
Pop $R0
Em_ItStillLive:
Pop $R0
End Function
#==============
# 升级结束时启动程序
#==============
Function LaunchExecutableFile
ExecShell "" "$PROGRAMFILES/产品名称/产品.exe"
End Function
结束了程序,最后说一下那个杀死进程的文件。
你需要把它解压缩,然后拷贝到你安装NSIS程序的<Plugins>文件夹下。
Kill Processes download link: http://nsis.sourceforge.net/mediawiki/images/f/f3/Processes.zip
再见了,2007~~
相关文章推荐
- [NSIS] 用NSIS做一个软件升级安装包
- NSIS:制作软件升级安装包
- nsSkinEngine_美化_安装包_NSIS_DirectUI_界面库_插件_防解包_自动升级_Duilib_C++_软件开发
- 每日一问:如何安装和升级一个RPM软件包?
- 在Android 下写一个检测软件版本号 以自动升级APP 的插件
- 使用 NSIS 制作软件安装包
- win7平台下QT软件的打包与发布 (利用NSIS脚本制作安装包)
- nsis安装包(四)_软件环境
- InstallShield制作软件安装包:在安装过程中启动一个c#写的程序
- NSIS 安装包确保只能有一个安装实例运行
- 写一个批量删除软件安装包的shell
- NSIS软件升级包的制作
- 一个自己写的真正判断文件格式,文件大小,而并不仅仅从扩展名来进行判断的上传方法,进一步加强防止软件或恶意的木马图片上传
- NSIS安装包制做软件的常用小技巧
- 一个产品从.net 1.1 软件升级到net2.0 记录
- NSIS 安装包确保只能有一个安装实例运行
- 一个自己写的真正判断文件格式,文件大小,而并不仅仅从扩展名来进行判断的上传方法,进一步加强防止软件或恶意的木马图片上传
- 版权声明:本文为博主原创文章,未经博主允许不得转载。 今天重写一个delphi7的CS架构的软件,原本自带的控件是Indy9。现在升级到Indy10,用delphi XE5开发。发现idTcpSer
- NSIS:应用软件自动升级功能的探索与实践
- 已证实Au_.exe是NSIS安装包的一个组成部分与说明