在安装中包含 Cab 文件

本部分介绍如何在安装中包含 cab 文件。 有关详细信息,请参阅使用 Cab 文件和压缩源

在安装包中包含 cab 文件

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