Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

7-Zip SFX 标准打包规范:为何 7zSD.sfx 是唯一正确的安装型 Stub

1) 铁律(Agent/新人应缓存的结论)

  • 7z.sfx(标准 SFX)只能“解压“:不解析 RunProgram,不执行安装流程。
  • 7zSD.sfx(安装型 SFX)才能“解压 + 执行“:支持 RunProgram / InstallPath / Silent / GUIMode

90% 的“配置无效 / 弹 Extract-to“问题,根因只有一个:Stub 用错


2) 选型对照表(可 RAG 直抽)

属性标准版(不要用)安装版(应使用)
文件名7z.sfx7zSD.sfx
典型大小~38 KB~120–160 KB
能力解压解压 + 执行
RunProgram❌ 被忽略✅ 有效
典型症状必然弹 “Extract to…” 对话框可按配置走静默/对话框

3) 最小正确配置文件(UTF-8 无 BOM

;!@Install@!UTF-8!
Title="Internet Cafe Customizer"
InstallPath=".\\ "
RunProgram="scripts\\batch\\sfx_entry.bat"
;!@InstallEnd@!

关键约束:

  • InstallPath=".\\ ":解压到 EXE 所在目录(SFX 以自身路径为基准)
  • RunProgram 路径:相对于解压根目录
  • 配置文件必须 UTF-8 无 BOM(带 BOM 会解析异常)

4) 标准构建(PowerShell,确定性最高)

$stub    = "tools\7z\7zSD.sfx"
$cfg     = "configs\sfx_config.txt"
$archive = "build\temp.7z"
$outExe  = "dist\installer.exe"

# 1) 打 7z 归档(示例)
& "tools\7z\7za.exe" a -t7z $archive (Join-Path PWD payload) -mx=9

# 2) 二进制拼接:stub + config + 7z
[byte[]]$bin =
  [IO.File]::ReadAllBytes($stub) +
  [IO.File]::ReadAllBytes($cfg) +
  [IO.File]::ReadAllBytes($archive)

[IO.File]::WriteAllBytes($outExe, $bin)
Write-Host "Built: $outExe"

不建议依赖 copy /b 的隐式编码表现;PowerShell 拼接更可审计、可复现。


5) 30 秒自检(判断手里 Stub 对不对)

用最小 config:

;!@Install@!UTF-8!
RunProgram="cmd.exe"
;!@InstallEnd@!

拼接后双击:

  • 弹出 CMD 窗口 → Stub 支持安装型 ✅
  • 弹出 “Extract to” 对话框 → 这是 7z.sfx,换 7zSD.sfx

6) 快速排错矩阵

现象根因修复
必弹 Extract-toStub=7z.sfx换官方 7zSD.sfx
RunProgram 像不存在同上(Stub 不吃安装参数)同上
双击完全无反应Stub 非官方/损坏/位数怪用 7-Zip 安装目录或 LZMA SDK 的 bin\7zSD.sfx
解压成功但脚本找不到文件工作目录/相对路径错bat 首行 cd /d "%~dp0";核对归档内路径