正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
x
不过要用它实现漂亮的安装界面和完美的安装功能就必须好好的写脚本。
而 NSIS 的脚本指令是在是太多了,有时候觉得好像又回到了学习 C 语言的年代。他丰富而起强大的功能甚至 可以编译出一些小而使用的软件(例如查找窗口句柄,然后...)
好了,不多说。我在这里着重介绍关于 NSIS 的一些使用问题以及新界面安装程序的制作过程,中间会附上一个 示例脚本。
这里只说单语言的简体中文
1. NSIS的运行问题
2.0a7 的 NSIS 安装在长文件名的目录中好像会有问题(Win2k 和 WinXP 下,Win98 下好像没问题)。你若是将 NSIS 安装在类似于“E:\System\Installer\NSIS 的目录中”(其中的“Installer”是超过了 8 个字符的长文 件名),运行 makensisw 或是直接在命令提示符中使用 makensis 可能会非法操作。
解决的办法是:
在命令提示符下使用如下指令:
cd E:\System\Instal~1\NSIS
进入 NSIS 安装目录后使用命令行:
makensis /CD /X"Compressor bzip2" "f:\1.nsi"
你可以在脚本文件中使用了“SetCompressor bzip2”指令,这样就可以去掉“/X"Compressor bzip2"”参数。 使用 makensisw 的朋友我就不多说了,你可以从我上面的分析中得到点启发。自己设置一下它的运行参数吧!
不过 makensisw 也有 Bug,若用 makensisw 编译时发现脚本错误,程序就立马非法操作。
2. 关于脚本的整体布局
说 NSIS 有些象高级语言的语法一点没错。NSIS 的语法非常注重先后顺序(我曾经为了一个指令的先后顺序来 回 Ctrl+C & Ctrl+V 了 N 次)。
例如象它的帮助文件中提到的“SetFont”指令必须在“AddBrandingImage”指令之前等。我在这里要说的而是 关于如何正确的对脚本进行整体布局,使其能更加合理、高效的被使用,这样才有利于日后的安装程序更新
你可以用我后面的示例脚本为模板制作自己的 NSIS 脚本。
大体布局如下:
//////////////////////////////////////////////////////////////
预设参数(包括外部压缩器选择、编译选项、宏定义以及文件包含等)
普通安装设置
自定义函数
安装程序区域内容
安装程序回调函数及其相关函数定义
卸载程序区域内容
卸载程序回调函数及其相关函数定义
//////////////////////////////////////////////////////////////
3. 关于安装程序 Logo 画面的说明:
先前版本的 NSIS 使用 splash.exe 制作 logo画面,但若您使用 2.0a7,
我建议您使用(好像也只能使用)magiclime.exe,它在 Win2k 和 WinXP
下显示 logo画面时会有淡入淡出的效果。超 Cool....
4. 关于标牌位图(即显示在安装程序对话框中的自定义位图)的说明:
2.0a7 提供了宏指令用于在安装程序的对话框中显示标牌位图。当然你也可以用标准的 NSIS 指令。
5. 关于使用新的 Modern UI 界面的说明:
2.0a7 同样提供了宏指令使你可以使用全新的安装界面:
首先你需要安装 NSIS v2.0a7 简体中文补丁(汉化新世纪有下载):
然后打开安装目录下的 Examples\Modern UI\ModernUI.nsh 文件,将从
!macro MUI_INTERFACE UI ICON UNICON CHECKS PROGRESSBAR
到第一个
!macroend
之间的注释符(即分号)删除(若没有这步究省了)。保存。
接下来就可以在你自己的脚本中使用形式对话框了,并且支持 WinXP 的新的视觉效果样式。
6. 以下是我的示例脚本:
7.注意两个标牌位图列表宏指令必须放置到函数的后面,就像我编写的那样,安装程序的标牌位
图列表放置到到所有安装程序回调函数的后面;卸载程序的标牌位图列表放置到所有卸载程序回
调函数的后面。
关键是要注意整体布局(这样才不会看迷糊),当然若编译不能通过,就要进行合适的调整。
8. 使用指令:
makensis /CD f:\study.nsi"
进行编译(这个示例脚本我没试过-_-,若编译无法通过只好自己动手研究研究了。我放出来只是用于参考学习)
9. 还没完—— NSIS 对多语言的支持还是不够完美(注意:是完美——有点鸡蛋里挑骨头的味道)。
我们继续:
用 ExeScope (其他的资源编辑器也行,别说你没有)打开生成的 study.exe 文件,找到对话框资源的 105 项
目。你会发现有一块很明显的用以显示标牌位图的控件。因为 NSIS 在插件此控件时是使其保持于授权协议文件
控件等高的,所以当使用用 modern2.exe 对话框模板时会与对话框顶部多出 45 的距离——不罗嗦了,总之根据
需要搞得好看就行(别过火!)。
顺便提一下,NSIS 安装目中的 Contrib\UIs 子目录下提供了多种对话框模板,你可以自行选用(就是用
ChangeUI 指令或用宏指令),甚至根据需要用资源编辑器修改模板资源。
接着修改:找到 111 项,把里面的资源汉化掉(新的界面居然没有对此对话框的多语言支持!这个对话框只有在
大容量的安装程序执行时才显示)。
用 ExeScope 更新后,再用 Hex WorkShop 打开我问可怜的试验品——study.exe,查找字符串
“unpacking data: ”(没引号的,你别瞎加。找不到别怪我 $_$)。找到后处理一下,用“正在解压缩数据:”
替换(正好 8 个字符 Yeah!)。
10. 现在我要说为什么不启用 UPX 压缩以及关闭 CRC 检测:
用 UPX 压缩可执行文件头或启用 CRC 检测(起用的话就是打开了自校验),我们的 ExeScope 就无用武之地了。但关于CRC校验又有些特别:使用者可以在命令行提示符下使用 /NCRC 开关参数执行安装程序,例如:若安装程序得文件名为“setup.exe”,那么就在命令行提示符下键入“setup.exe /NCRC”就可跳过 CRC 校验执行安装程序(但如果你将CRCCheck指令的参数设置为force的话,就什么办法也没了),但这样对使用者而言比较麻烦。
至此全部完工。
若有任何语法难点,请参阅 NSIS 的帮助文件(有了中文版的应该方便些吧!)。内有上千字的详细说明(可能更多,我也没统计过)。还有一些指令我没有用上,因为那些不太可能用的上。
这个示例脚本已能作出较佳的安装程序界面,大家看看我为 QCD v3.40B35 做的安装界面。
|