上手· 04

执行与日志

三个阶段怎么跑、产出文件怎么找出来、日志面板为什么要自己解码 GBK,以及执行期间为什么不能切工程。

适用于 v0.2.0/约 3 分钟/上手

两种跑法

按钮 行为
全部执行 合并 → 加密 → 打包 顺序跑,过程中显示「正在执行 N / 3」
单独执行 只重跑某一行对应的阶段,其余不动

每一步都从落盘的工程文件读参数:点执行时 Rust 侧会先 save_project,再进流水线。 所以「界面上改了但还没保存」这件事不存在 —— 保存的权威在后端,不在那 600ms 的防抖里。

失败即停。某一步失败会保留完整日志并停下,后面的步骤不再执行:它们依赖前一步的产物, 拿半成品继续跑只会得到更难排查的错误。

全部执行完成后的三行状态与产出文件
跑完三步 —— 每行的状态、摘要与产出文件都在

产出文件是「找」出来的,不是猜的

打包出来的文件名由 Inno 的 OutputBaseFilename 决定,合并与加密则是原地覆盖主程序 —— 三条路径的产物形态完全不同。所以 SealPack 不猜文件名,而是:

  1. 执行前给输出目录拍一张快照(文件名 + 修改时间 + 大小);
  2. 执行后再拍一张;
  3. 只认「本次新产生」或「本次被改写」的文件,并且递归到子目录。

于是「产出文件」按钮点下去,定位的永远是这次真正生成的那一份。 清单里躺着的旧安装包不会被误认成新产物。

日志面板

外部工具的 stdout / stderr 逐行推送,面板里分行显示并标注来源:

  • UTF-8 与 GBK 都要认。 子进程输出可能是 UTF-8,也可能是系统 ANSI 代码页 (简体中文 Windows 上是 GBK)。解码先试 UTF-8,失败再按 GBK 解 —— 否则日志里全是乱码。
  • 超过 5000 行从最早的开始裁剪。 长时间构建不会把内存吃满。
  • 口令会被打码。 命令行原样打进日志,其中可能带口令;唯一的出口按规则表遮掉 PASSWORD= / SNKEYPASS= / RENAMEPASSWORD= / KEYPASS=(大小写不敏感)。
  • 面板是 live region,读屏软件能读到新行;但不会在每次追加时抢焦点。

执行期间不能切工程

跑起来之后,左侧工程列表会被禁用 —— 中途切换工程会让正在跑的阶段落到另一个目标上。

但这只是第一道防线:快捷键与程序化路径仍可能触发切换。所以 runStage / runAll 在入口就快照当前工程,之后每次写回(状态、产出、保存指示)都先校验 current.id 是否还是它。 校验不过就丢弃这次写回,而不是写到别人的工程上。

临时文件

每个工程的阶段临时文件写在 %APPDATA%\com.hmilyld.sealpack\work\<工程 id>\ 下, 程序启动时清理超过 24 小时的。异常退出(强杀、断电)可能留下临时文件, 而加密配置与打包脚本里含明文口令 —— 这就是为什么要定时清。

搜索Esc

↑ ↓ 选择 · Enter 打开 · 中英文都能搜