一、下载

    7z是一个免费的工具,除了通过命令行的方式提供各种文件、压缩包相关的操作外,还提供了一种方式可以打出自解压的exe程序。该程序从运行到结束经历了三个流程:

(1) 解压文件到用户临时目录;

(2) 运行指定的启动程序/脚本;

(3) 运行完之后退出删除解压文件;

   在网站 https://www.7-zip.org/  7z官网上可以下载最新的7z程序,运行安装,安装之后的目录结构为:

 7z 命令行方式生成自解压exe-编程知识网

    其中 7-zip.chm是帮助文档,7z的许多命令行用法在该文档中均可查到;

    根据文档的说明,若想打出自解压的exe,需要在官网上下载 LZMA SDK包获取其中的 {SFX_Module}相关文件。

二、配置

    根据chm手册了解到若想要打出自解压的exe,需要如下步骤:

(1) 从LZMA SDK解压目录 bin 目录下将以下3个文件拷出放到7z的解压目录下。

7z 命令行方式生成自解压exe-编程知识网

(2) 准备程序,这里比较简单,一个目录下三个文件,其中一个是启动脚本。

7z 命令行方式生成自解压exe-编程知识网

(3) 准备config.txt,内容如下

;!@Install@!UTF-8!
Title="Patch Tool"
ExecuteFile="start.bat"
;!@InstallEnd@!

(4) 准备生成exe的脚本文件,内容如下:

del test.7z
del test.exe

set srcpath=%1%     //传递test文件夹目录绝对地址
echo %srcpath%
7z a test.7z "%srcpath%*" -r -mx -mf=BCJ2       //将test文件夹内所有文件压缩到7z包中,不包含test目录
copy /b 7zSD.sfx + config.txt + test.7z test.exe

(5) 将config.txt、生成exe的脚本、7z相关的文件放到一个目录下,如下

7z 命令行方式生成自解压exe-编程知识网

通过以上步骤,exe自解压相关的内容基本配置完毕。

三、运行

   直接运行 windowsExe.bat脚本,输入test目录绝对地址,会自动生成7z文件和exe文件,双击运行exe文件即可。

四、知识点

    根据帮助文档的内容,可以得知 7z 提供了一下{SFX_Module}配置

SFX_Module Description
7z.sfx SFX module (GUI version)
7zCon.sfx SFX module (Console version)
7zSD.sfx SFX module for installers (GUI version)
7zS2.sfx small SFX module for installers (GUI version)
7zS2con.sfx small SFX module for installers (Console version)

 生成自解压exe的命令必须是:copy /b 7zSD.sfx + **.txt + **.7z **.exe  (其中**.txt可选)。

若将7zSD.sfx更换成表格中的不同sfx文件,会有不同结果如下:

(1) 7z.sfx 

    实际上生成的仅是自解压功能的exe,双击exe,会出现解压界面,要求用户选择自解压的路径,但是 **.txt配置的内容均是无效的。仅是完成自解压的功能。

7z 命令行方式生成自解压exe-编程知识网

 (2) 7zCon.sfx 

      与(1) 的效果一致,也是仅完成自解压的功能,唯一区别在于双击exe,出现的是命令行,所有信息在命令行中输出。

(3) 7zS 开头的sfx

      这类才是可安装的exe,自解压到临时目录,运行指定程序,区别在于自解压界面呈现的方式(有的是用户可视界面,有的是命令行界面)。