零、引

为啥么写这个捏?

缘于某天在CFan上看到的一个帖子。

当然是大D做版主的区啦。哈哈。。

CFAN帖子

CFAN帖子

首先呢,文件是7z压缩的,进行了分卷,其次,大D对附件中的程序用PEID查看了一下。

于是了解到安装程序使用NSIS(Nullsoft Scriptable Install System) 来制作的,于是有了这篇文章。

一、神马是NSIS

好,NSIS,这是一个神奇的东西。。很多的安装程序都是这个程序打包出来的,下面原因Wiki百科的内容,详细请点击:http://zh.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System

Nullsoft 脚本安装系统(英语:Nullsoft Scriptable Install System,缩写:NSIS)为一个开放源代码脚本驱动的封装安装档用工具。可以用其脚本语言自定安装的流程,同时支援多种语系的安装接口。

好吧,你可以略过这一段不读。

二、准备

7z,这个家伙很让人纠结。自解压程序吧,那就不能分卷,分卷就不能自解压。

还好7z提供了命令行版本的7z。

大家可以到7z的官方网站下载。

NSIS大家就上网去找吧,有的是。

NSIS属于脚本类的打包程序,大家可以下载一个VNISedit,这东西可以代码高亮和代码补完,很方便实用。

三、7z

咱们先来了解一下7z的问题。

7z不能创建支持分卷压缩的自解压程序,压缩出来的文件名类似于X.7z.001,依此类推。

并且分卷只能通过7z程序来解压缩。

7z提供的命令行模式程序——7za可以帮我们完成加入打包程序/制作安装程序这一类的工作。

查阅了7za的help文件,得知到7z命令行模式可以使用以下参数:

Command Description
a Add
b Benchmark
d Delete
e Extract
l List
t Test
u Update
x eXtract with full paths

我们这里用x参数就可以了。

x (Extract with full paths) command

Extracts files from an archive with their full paths in the current directory, or in an output directory if specified.

See the e (Extract) command description for more details.

Examples

7z x archive.zip

extracts all files from the archive archive.zip to the current directory.

7z x archive.zip -oc:\soft *.cpp -r

extracts all *.cpp files from the archive archive.zip to c:\soft folder.

四、脚本范例v0.1

准备工作已经就绪,Let`s do it~

下面来说明一下代码。

首先,在NSIS中,以;和#开头的,为注释,相当于//和/**/。

第二,NSIS支持宏定义。

第三,每一个脚本中必须包含一个Section和SectionEnd。Section表示开始起点,SectionEnd表示过程运行结束。

第四,每一个脚本中必须包含一个OutFile。OutFile用于输出打包好的安装程序。

第五,要把所有需要打包的文件放到一个目录里面,在本例中,大D放置到了

目录下。

大家可以将代码修改修改适用于自己的压缩包,编译运行。文件就会被顺利的解压缩到指定目录。

脚本范例v0.1版本界面

脚本范例v0.1版本界面

但是这个版本有这样一些问题:

1.不能在安装过程中控制安装路径。

2.没有卸载功能。

于是,我们进行修改,便有了v0.2

五、脚本范例v0.2

page为增加页,具体可以参考NSIS的帮助文件,里面有详细的函数控制以及函数参数的相关信息。

一个安装脚本可以有多个过程,用于创建诸如卸载程序或者绑定首页一类的工作。

大家可以看到我们不仅仅生成了安装程序,也生成了卸载程序。

安装程序也有自定义安装路径的页面了。

脚本范例v0.2

脚本范例v0.2

总体上来看已经有点安装程序的样子了。

可是这还不够。现在的这个界面太老太丑了。。而且默认还是英文界面。

于是我们继续改进。

六、脚本范例v0.3

在这一版本中,我们将使用新版的NSIS界面——Modern UI 2.0

首先, 在脚本的开头添加此行来引入 Modern UI:

代码如下:

脚本范例v0.3 欢迎界面

脚本范例v0.3 欢迎界面

脚本范例v0.3 安装目录选择界面

脚本范例v0.3 安装目录选择界面

七、结束

嗯,洋洋洒洒凑了一堆字。基本上来讲,通过NSIS自解压7z分卷的目的已经达到了。

只用把代码内关于文件名的部分进行调整即可使用。

权当抛砖引玉。。

喜欢折腾的看官,您可以去折腾着玩儿了~

八、参考

1.NSIS用户手册

2.7za用户指南

对以上文档文献的编纂者、翻译者表示感谢。

版权声明
转载保留版权: 大D技研室 | 《实战NSIS——7z分卷压缩自解压》
本文链接地址:https://www.dadclab.com/archives/1495.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , , , , 标签