NSIS制作软件升级安装包完整教程
nsis 是“nullsoft 脚本安装系统”(nullsoft scriptable installation system) 的缩写,它是一个免费的 win32 安装、卸载系统,采用了简洁高效的脚本方式。它本来是一个由 nullsoft 创建并用于作为 winamp 及其插件发布的系统,但现已被上百个应用程序所应用,作为它们进行程序发布的工具。
相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生。在这种情况下,您可能就需要一个软件的升级安装包了。
现在,我们就来一步步把这个安装包做出来。
nsis下载地址:
前提:用户已经使用我们的完整安装包安装过了,且已经在注册表中记录了安装路径。
在注册表中写入安装路径writeregstr hkcu "software\无名智者作品系列" "" $instdir
我们要实现以下功能:
1、运行时检测注册表中是否有指定的安装路径,如果有,直接进入安装过程,如果没有,给一个提示。
2、运行时检测程序是否运行,如果正在运行则可以选择强制结束。
3、升级过程中实现解压文件、运行bat等操作,且有进度条提示。
4、升级结束时打开升级说明以便用户查看。
第一步:定义基本框架
"!define product_name "a"!define product_version "1.0.0.1" setcompressor lzmasetfont "tahoma" 8requestexecutionlevel admin !include "mui2.nsh" !insertmacro mui_language "simpchinese" name "${product_name}_升级_${product_version}"outfile "${product_name}_升级_${product_version}.exe"installdirregkey hkcu "software\a" "" section "升级文件" sec01 setdetailsprint textonly detailprint "正在升级 ${product_name},请单击关闭按钮完成升级!" setdetailsprint listonly sectionin ro setoutpath "$instdir"setoverwrite ifnewer ;升级文件file "a.exe" file "server\更新说明.txt" ;运行bta nsexec::exec "$instdir\a.bat" ;指定以记事本打开说明 exec '"$sysdir\notepad.exe" "$instdir\更新说明.txt"' sectionend
如果没有其他错误,这时候我们的升级程序就已经可以编译了。
下面,我们继续进行完善。
第二步:禁止重复运行
在.oninit区段加入以下代码
initpluginsdir ;创建互斥防止重复运行 system::call 'kernel32::createmutexa(i 0, i 0, t "ainstaller") i .r1 ?e' pop $r0 strcmp $r0 0 +3 messagebox mb_ok|mb_iconexclamation "有一个 ${product_name} 升级程序已经运行!" abort
第三步:加入是否安装判断
我们通过检测注册中指定键值的方式来判断软件是否已经正确安装。
在.oninit区段加入以下代码
;判断是否已安装 readregstr $0 hkcu "software\a" "" strcmp $0 "" 0 noabort messagebox mb_ok|mb_iconexclamation "您未正确安装本软件,不能使用此升级程序!" abort ;退出安装程序 noabort:
第四步:如果程序正在运行则关闭程序
在.oninit区段加入以下代码
;关闭进程 push $r0 checkproc: push "asc.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 "asc.exe" processwork::killprocess sleep 1000 goto checkproc exit: abort done: pop $r0
这时我们会发现整个安装程序还不是很美观,那么我们继续。
第五步:添加mui
mui,你懂的!
好,至此,这个软件升级包就大功告成了。
当然,你还可以在其中加入其他功能,比如更新卸载文件代码、注册dll、设置壁纸、更改主题等,不过,轻狂劝你:这只是一个升级安装包而已,没必要搞得功能那么复杂吧!呵呵