在安装中包含 Cab 文件
本部分介绍如何在安装中包含 cab 文件。 有关详细信息,请参阅使用 Cab 文件和压缩源。
在安装包中包含 cab 文件
- 使用 cab 创建工具将源文件压缩成 cab 文件。 请参阅 Cab 文件。
- cab 文件必须位于 .msi 文件内的数据流中,或者位于由 Directory 表指定的源树根目录下的单独 cab 文件中。
- 确定源是压缩类型还是同时具有未压缩和压缩文件的混合类型。 请参阅压缩和未压缩的源。 根据源映像的类型,设置字数统计摘要属性的压缩或未压缩标志位。
- 在 File 表中为 cab 文件中的每个文件添加一条记录。 在 File 列中输入文件键,该键必须与 cab 文件中文件的文件键完全匹配。 文件键区分大小写。 File 表和 cab 文件中的文件安装顺序也必须相同。 文件顺序由 Sequence 列中的序号指定。 若要获取 cab 文件中第一个文件的序号,请执行以下操作。 在 Media 表中查找在 DiskID 列中具有最大值的现有记录。 此记录的 LastSequence 字段指定了媒体上使用的最后一个文件序号。 在 File 表中,为新 cab 文件中的第一个文件分配一个大于此序号的序号。 按照与 cab 文件中相同的顺序为所有剩余文件分配序号。 有关剩余记录字段的说明,请参阅 File 表。
- 在 Media 表中为 cab 文件添加一条记录。 在此新记录的 DiskID 字段中指定一个值,该值应该大于表中已存在的最大 DiskID 值。 在 Cabinet 字段中输入 cab 文件的名称。 此名称必须采用 Cabinet 数据类型的格式。 如果 cab 文件是存储在 .msi 文件中的数据流,请在名称前面加上数字符号“#”作为前缀。 请注意,如果 cab 文件是数据流,则 cab 文件名区分大小写。 如果 cab 文件是单独的文件,则文件名不区分大小写。
- 通过检查已更新的 File 表的 Sequence 列来确定新 cab 文件中的最大文件序号。 在 Media 表的新记录的 LastSequence 字段中输入一个大于此值的值。 有关剩余记录字段的说明,请参阅 Media 表。
- 可以使用 Msidb.exe 等工具或使用安装程序的数据库函数将 cab 文件存储在安装包中。 以下四个步骤说明如何使用数据库函数通过程序添加 cab 文件。
- 若要通过程序将 cab 文件添加到安装包,请使用 MsiDatabaseOpenView 在数据库的 _Streams 表中打开一个视图。
- 使用 MsiRecordSetString 将 _Streams 表的 Name 列设置为 Media 表的 Cabinet 列中显示的名称。 省略数字符号:#。
- 使用 MsiRecordSetStream 将 _Streams 表的 Data 列设置为 cab 文件的数据。
- 使用 MsiViewModify 更新 _Streams 表中的记录。
- 若要使用 Msidb.exe 将 cab 文件 Mycab.cab 添加到名为 Mydatabase.msi 的安装包,请使用以下命令行:Msidb.exe -d mydatabase.msi -a mycab.cab。 在这种情况下,Media 表的 Cabinet 列应包含字符串:#mycab.cab。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈