您的位置:首页 > 其它

[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~~

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐