上手· 03

打包与排除项

自动项与自定义项的区别、通配符为什么不能带逗号,以及「写入 Excludes」到底写出了什么。

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

上半部分:不参与打包的文件

安装包会把主程序所在目录整个收进去,但有些文件不该进包。列表分两类:

自动项由前两步推导,不能在这里删除:

  • 待合并的程序集 —— 它们已经被合并进主程序了,再打一份就是重复;
  • 主程序备份 <主程序名>.bakup —— 它是退路,不是产物。

界面上以只读形式展示,是为了让你知道「为什么这些文件没进安装包」。 一条看不见的排除规则比一条看得见的更可疑。

自定义项支持相对路径与 Inno 的通配符,用「添加文件 / 添加文件夹 / 添加通配符」三个入口管理。

打包步骤:排除项列表与安装包选项
④ 打包 —— 上半部分是排除项,下半部分是安装包选项

通配符里不能有逗号

Inno 的 Excludes 本身以逗号分隔多项,所以一条通配符里再带逗号,会被拆成两条 —— 前一条少半截、后一条多出半截,两边都匹配不到你想要的东西。界面在添加时就会拦下来。

展开「写入 Excludes」可以看到最终拼出来的字符串,它长这样:

Excludes: "*.pdb,app.bakup,Newtonsoft.Json.dll"
打包排除项:自动项与自定义项
排除项 —— 自动项只读,自定义项支持相对路径与通配符

主程序只能被收录一次

生成的 .iss 里有两行 Source:

Source: "{#Root}\App.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#Root}\*"; Excludes: "{#Ignore},App.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

第二行必须把主程序本身也排除掉,否则同一个文件会进包两次 —— Inno 会报重复文件, 体积统计也会重复计数。自动项里至少含主程序备份,所以不会拼出以逗号开头的空项。

下半部分:安装包选项

分组是固定的五组:压缩格式、打包模式、安装包加密与签名、安装行为、完整性校验。 每个选项的语义与默认值在打包选项里逐条列了,这里只说三件容易误解的事:

  1. 压缩格式是「算法 + 等级」写成一个值(lzma2/max),不是两个下拉框。
  2. LZMA 字典大小填 0 表示不写这一行,交给 Inno 按压缩等级自己决定 —— 这几乎总是更好的选择。
  3. 安装包加密的默认值和 Inno 不一样:Inno 自己默认 no,SealPack 默认 yes。

产出校验清单

若在选项里选了算法,打包完成后会在输出目录生成 checksums-<算法>.txt, 格式沿用 sha256sum 的 <摘要> <文件名>(两个空格),可以直接用现成工具校验:

certutil -hashfile 安装包.exe sha256
:: 或
sha256sum -c checksums-sha256.txt

清单只包含本次构建新产生或被改写的文件(比对构建前后的目录快照 + 修改时间), 不会把目录里躺着的无关文件算进去。

搜索Esc

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