这些文件都是7-Zip自解压缩文件(SFX)的默认模板。每个文件名后缀代表不同类型的操作系统和处理器架构
这些文件都是7-Zip自解压缩文件(SFX)的默认模板。每个文件名后缀代表不同类型的操作系统和处理器架构。
Default.SFX:这是用于32位Windows操作系统的默认SFX模板,其中包含了7-Zip解压程序。
Default64.SFX:这是用于64位Windows操作系统的默认SFX模板,其中包含了7-Zip解压程序。
WinCon.SFX:这是用于32位Windows控制台应用程序的SFX模板,其中包含了7-Zip解压程序和一个命令行窗口。
WinCon64.SFX:这是用于64位Windows控制台应用程序的SFX模板,它包含了7-Zip解压程序和一个命令行窗口。
Zip.SFX:这是用于任何操作系统的默认ZIP压缩文件的SFX模板,其中包含了7-Zip解压程序。
Zip64.SFX:这是用于任何操作系统的大文件ZIP压缩文件的SFX模板。与Zip.SFX一样,它也包含了7-Zip解压程序,但支持更大的文件。
这些SFX模板可以方便地用于创建自定义自解压缩文件,其中包含了指定的文件和7-Zip解压程序。开发者可以使用7-Zip提供的命令行界面(7z.exe)或其他工具来构建自定义SFX文件,以满足特定的分发需求。
更偏底层/原理级的技术拆解,不仅解释“是什么”,还讲清楚这些 .SFX 模板在内部是如何工作的,以及它们之间真正的差异点。
一、SFX 本质:不是“压缩包”,而是“可执行程序 + 压缩数据”
7-Zip 的 SFX 文件本质结构:
[SFX模块(EXE)] + [配置段(可选)] + [压缩数据(7z/zip)]
也就是说:
👉 它其实是一个 Windows 可执行文件(PE结构)
👉 后面“拼接”了一段压缩包数据
运行时流程:
- SFX EXE 启动(WinMain)
- 定位自身文件末尾的数据段
- 调用内置解压模块(LZMA / ZIP)
- 解压到临时目录
- 根据配置执行程序(可选)
二、6种 SFX 模板的真正区别(深入版)
你列的分类基本正确,但我们把它拆到实现层级来看:
1️⃣ Default.SFX(32位 GUI)
技术特征:
- PE32(x86)
- 子系统:Windows GUI
- 使用 WinAPI(无控制台窗口)
- 内置:
- LZMA 解压器
- 简单 UI(进度条)
运行行为:
- 双击 → 无黑窗口
- 显示进度条
- 支持 config.txt 自动执行程序
适用: 👉 给普通用户发安装包
2️⃣ Default64.SFX(64位 GUI)
核心区别:
- PE32+(x64)
- 可调用 64 位 API
- 更大地址空间
但注意:
👉 解压逻辑 ≈ 完全一样
👉 性能差异很小(除非超大文件)
存在意义:
- 避免 WOW64(32位进程在64位系统运行)
- 更“原生”
3️⃣ WinCon.SFX(32位 控制台)
关键点:
- 子系统:Console
- 启动时会出现 CMD 窗口
内部行为:
main() → 控制台输出 → 解压日志
特点:
- 可以输出日志
- 可重定向输出(> log.txt)
- 更适合脚本调用
4️⃣ WinCon64.SFX(64位 控制台)
和上面一样,但:
- x64 架构
- 支持更大内存
- 适合服务器/自动化部署
5️⃣ Zip.SFX(ZIP格式 SFX)
⚠️ 这是很多人误解的点:
它不是“通用操作系统”,而是:
👉 使用 ZIP 解压引擎,而不是 7z(LZMA)
区别:
| 特性 | 7z SFX | Zip SFX |
|---|---|---|
| 压缩算法 | LZMA | Deflate |
| 压缩率 | 高 | 较低 |
| 兼容性 | 需7z模块 | 更通用 |
内部变化:
解压模块:
- 7zSFX → LZMA decoder
- ZipSFX → ZIP decoder
6️⃣ Zip64.SFX(大文件ZIP)
核心差异:
支持:
ZIP64 扩展格式
👉 解决 ZIP 的限制:
| 限制 | 传统 ZIP | ZIP64 |
|---|---|---|
| 单文件 | 4GB | ✔ |
| 总大小 | 4GB | ✔ |
| 文件数 | 65535 | ✔ |
技术实现:
- 使用 ZIP64 Header
- 解析 64-bit size 字段
三、SFX 的关键技术点(重点)
🔹 1. 文件拼接(核心机制)
构建 SFX:
copy /b 7z.sfx + config.txt + archive.7z output.exe
👉 /b = 二进制拼接
最终结构:
[EXE stub][config][7z data]
🔹 2. 配置段(config.txt)
示例:
;!@Install@!UTF-8!
Title="My App"
RunProgram="setup.exe"
;!@InstallEnd@!
解析方式:
- SFX 启动后扫描标记:
;!@Install@! - 读取配置
- 控制行为
🔹 3. 解压流程(底层)
伪代码:
open_self();
locate_archive_offset();
init_decoder();
extract_to_temp();
if (RunProgram)
execute();
🔹 4. 临时目录机制
默认:
%TEMP%\7zSxxxx.tmp\
特点:
- 自动清理(部分版本)
- 防止污染系统
四、架构差异总结(核心对比)
| 模板 | 架构 | UI | 解压引擎 | 场景 |
|---|---|---|---|---|
| Default | x86 | GUI | LZMA | 普通用户 |
| Default64 | x64 | GUI | LZMA | 64位系统 |
| WinCon | x86 | 控制台 | LZMA | 脚本 |
| WinCon64 | x64 | 控制台 | LZMA | 自动化 |
| Zip | x86 | GUI | ZIP | 兼容 |
| Zip64 | x64 | GUI | ZIP64 | 超大文件 |
五、关键结论(很多人不知道)
✅ 1. SFX ≠ 压缩格式
它只是“EXE壳 + 压缩数据”
✅ 2. 32/64 位差异不在压缩,而在“运行环境”
✅ 3. 真正决定行为的是:
- SFX 模块
- config.txt
- 压缩格式
✅ 4. 可以魔改(高级玩法)
你可以:
- 替换图标(Resource Hacker)
- 修改标题
- 注入安装逻辑
- 做“伪安装器”
六、进阶(如果你要更深入)
我可以继续帮你拆:
👉 SFX 模块内部 PE 结构
👉 如何反编译 7zSFX
👉 如何做“静默安装 EXE”
👉 如何做企业级一键部署包

浙公网安备 33010602011771号