7z 命令行方式生成自解压exe
一、下载
7z是一个免费的工具,除了通过命令行的方式提供各种文件、压缩包相关的操作外,还提供了一种方式可以打出自解压的exe程序。该程序从运行到结束经历了三个流程:
(1) 解压文件到用户临时目录;
(2) 运行指定的启动程序/脚本;
(3) 运行完之后退出删除解压文件;
在网站 https://www.7-zip.org/ 7z官网上可以下载最新的7z程序,运行安装,安装之后的目录结构为:

其中 7-zip.chm是帮助文档,7z的许多命令行用法在该文档中均可查到;
根据文档的说明,若想打出自解压的exe,需要在官网上下载 LZMA SDK包获取其中的 {SFX_Module}相关文件。
二、配置
根据chm手册了解到若想要打出自解压的exe,需要如下步骤:
(1) 从LZMA SDK解压目录 bin 目录下将以下3个文件拷出放到7z的解压目录下。

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

(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相关的文件放到一个目录下,如下

通过以上步骤,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配置的内容均是无效的。仅是完成自解压的功能。

(2) 7zCon.sfx
与(1) 的效果一致,也是仅完成自解压的功能,唯一区别在于双击exe,出现的是命令行,所有信息在命令行中输出。
(3) 7zS 开头的sfx
这类才是可安装的exe,自解压到临时目录,运行指定程序,区别在于自解压界面呈现的方式(有的是用户可视界面,有的是命令行界面)。
7z 命令行方式生成自解压exe的更多相关文章
- JAVA基础学习之命令行方式、配置环境变量、进制的基本转换、排序法、JAVA文档生成等(1)
		
1.命令行方式 dos命令行,常见的命令: dir:列出当前目录下的文件以及文件夹 md:创建目录 rd:删除目录 cd:进入指定目录 cd..:退回到上一级目录 cd/:退回到根目录 del:删除文 ...
 - 7z命令行简单使用
		
7z命令行简单使用 网上有很多博客都有记录7z的命令行使用方式,但看起来乱起八糟的,不知所云. 急于使用者可以直接看实例 注:我仅仅记录我认为常用的命令,毕竟没有那么多的精力去学习不常用的东西. 简介 ...
 - 在非SQL客户端使用命令行方式定期连接SQL Server 服务器并模拟用户查询操作,同时输出信息内容
		
一个很长的标题,实现的功能就是尽量使用非人力的方式模拟人去做一件事情,为了便于记录,将他们输出成文件方便查阅. 图形界面方式,使用微软自己的ConnMaker.exe,或者Microsoft 数据连接 ...
 - 7z命令行参数中的路径
		
最近在自动化的过程中用到了7z命令行工具,发现其参数中的路径挺有意思的,在此总结一下.本文中所有demo使用的7z版本为:15.14 x64. 压缩某个文件夹 下面的命令会把g:\temp\目录和目录 ...
 - [转]Windows中使用命令行方式编译打包Android项目
		
http://my.oschina.net/liux/blog/37875 网上很多用Ant来编译打包Android应用的文章,毕竟Ant是纯Java语言编写的,具有很好的跨平台性.今天想写个纯win ...
 - ResHacker 用命令行方式修改 windows PE文件版本号
		
由于工作需要在詹金斯(genkins)集成环境打包,打包避免不了需要修改版本号,写入版本号最简单的方式通过修改windows rc文件 这就意味着,每次构建新版本前需要修改一次源文件 这个在用詹金斯集 ...
 - 7Z命令行详解
		
7z.exe在CMD窗口的使用说明如下: 7-Zip (A) 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06 Usage: 7za <co ...
 - 7Z命令行
		
7-Zip (A) 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06 Usage: 7za <command> [<switch ...
 - Jmeter命令行方式启动
		
在性能测试过程中,我们常常遇到这样的问题,使用Jmeter的GUI界面进行大并发量的性能测试时,界面容易卡死,无法继续进行性能测试.通过使用命令行方式启动jmeter是一个不错的方式.下面就简单介绍一 ...
 
随机推荐
- 长春理工大学第十四届程序设计竞赛(重现赛)J
			
J.Printout 题目:链接:https://ac.nowcoder.com/acm/contest/912/J 题目: 小r为了打校赛,他打算去打字社打印一份包含世界上所有算法的模板. 到了打字 ...
 - K8s集群部署(三)------ Node节点部署
			
之前的docker和etcd已经部署好了,现在node节点要部署二个服务:kubelet.kube-proxy. 部署kubelet(Master 节点操作) 1.二进制包准备 [root@k8s-m ...
 - Web安全深度剖析
			
Web安全深度剖析 链接:https://pan.baidu.com/s/15NulgWNzQ2JPCdn9q1jE-g 提取码:6y83 Web安全深度剖析>总结了当前流行的高危漏洞的形 ...
 - 通过phpmyadmin设置数据库密码后若出现phpmyadmin拒绝访问的情况
			
方法一:可以修改config.inc.php配置文件中的$cfg['Servers'][$i]['password'] = '你的密码'; 方法二:将config.inc.php配置文件中的$cfg[ ...
 - Hackbar再次更新后的破解思路 v2.2.6
			
不得不说在日常测试和渗透测试中hackbar这一插件给我带来了很大的便利 Hackbar在2.1.3之后的版本就开始收费了虽说价格不是很贵,但我们还是本着学习研究的心态来看看怎么绕过收费验证. 谷歌: ...
 - DRF 版本、认证、权限、限制、解析器和渲染器
			
目录 一.DRF之版本控制 为什么要有版本控制? DRF提供的版本控制方案 版本的使用 全局配置 局部配置(使用较少) 二.DRF之认证 内置的认证 步骤 三.DRF之权限 1.自定义一个权限类 2. ...
 - django的命令, 配置,以及django使用mysql的流程
			
1.Django的命令: 下载 pip install django==1.11.16 pip install django==1.11.16 -i 源 创建项目 django-admin start ...
 - 关于Keepalive的那些事
			
服务端很多同学包括自己对keepalive理解不清晰,经常搞不清楚,TCP也有keepalive,HTTP也有keepalive,高可用也叫keepalive,经常混淆这几个概念.做下这几个概念的简述 ...
 - Oracle数据库备份---导出与导入
			
利用windows的cmd命令备份导出数据(也可以连接上sqlplus进行操作)--导出--将数据库orcl完全导出 exp system/oracle@orcl file=c:\oracle_bak ...
 - synchronized与ReentrantLock实现共享资源的消费
			
主方法 public class synchronizedTest { public static void main(String[] args) { long startTime = System ...