nsis升级包_NSIS:制作软件升级安装包

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

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

前提:用户已经使用我们的完整安装包安装过了,且已经在注册表中记录了安装路径。

;在注册表中写入安装路径

WriteRegStr HKCU "Software\轻狂的软件" "" $INSTDIR

我们要实现以下功能:

1、运行时检测注册表中是否有指定的安装路径,如果有,直接进入安装过程,如果没有,给一个提示。

2、运行时检测程序是否运行,如果正在运行则可以选择强制结束。

3、升级过程中实现解压文件、运行BAT等操作,且有进度条提示。

4、升级结束时打开升级说明以便用户查看。

第一步:定义基本框架

/*

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

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

;判断是否已安装

ReadRegStr $0 HKCU "Software\轻狂的软件" ""

StrCmp $0 "" 0 NoAbort

MessageBox MB_OK|MB_ICONEXCLAMATION "您未正确安装轻狂的软件,不能使用此升级程序!"

Abort ;退出安装程序

NoAbort:

第四步:如果程序正在运行则关闭程序

在.onInit区段加入以下代码

;关闭进程

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

这时我们会发现整个安装程序还不是很美观,那么我们继续。

第五步:添加页眉图片和图标

!define MUI_ABORTWARNING

!define MUI_HEADERIMAGE

!define MUI_ICON "Setup\logo.ico"

!define MUI_HEADERIMAGE_BITMAP "Setup\modern-header.bmp"

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值