上手· 03
打包与排除项
自动项与自定义项的区别、通配符为什么不能带逗号,以及「写入 Excludes」到底写出了什么。
上半部分:不参与打包的文件
安装包会把主程序所在目录整个收进去,但有些文件不该进包。列表分两类:
自动项由前两步推导,不能在这里删除:
- 待合并的程序集 —— 它们已经被合并进主程序了,再打一份就是重复;
- 主程序备份
<主程序名>.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 会报重复文件, 体积统计也会重复计数。自动项里至少含主程序备份,所以不会拼出以逗号开头的空项。
下半部分:安装包选项
分组是固定的五组:压缩格式、打包模式、安装包加密与签名、安装行为、完整性校验。 每个选项的语义与默认值在打包选项里逐条列了,这里只说三件容易误解的事:
- 压缩格式是「算法 + 等级」写成一个值(
lzma2/max),不是两个下拉框。 - LZMA 字典大小填 0 表示不写这一行,交给 Inno 按压缩等级自己决定 —— 这几乎总是更好的选择。
- 安装包加密的默认值和 Inno 不一样:Inno 自己默认
no,SealPack 默认yes。
产出校验清单
若在选项里选了算法,打包完成后会在输出目录生成 checksums-<算法>.txt,
格式沿用 sha256sum 的 <摘要> <文件名>(两个空格),可以直接用现成工具校验:
certutil -hashfile 安装包.exe sha256
:: 或
sha256sum -c checksums-sha256.txt
清单只包含本次构建新产生或被改写的文件(比对构建前后的目录快照 + 修改时间), 不会把目录里躺着的无关文件算进去。