ImageFamilies 表 (Patchwiz.dll)
映像系列是指一个组,其中包含已更新到最新版本的产品的一个或多个映像。 每个升级后的映像只能属于一个系列。 属于映像系列的升级映像会共享一个或多个文件。 每个映像系列在 .msp 文件中都有自己的 cabinet 文件,其中包含更新目标文件和升级文件之间的差异所需的二进制修补程序和新文件。 文件柜文件不会复制共享文件使用的二进制修补程序和新文件。
每个补丁创建数据库(pcp 文件)都需要一个至少包含一条记录的 ImageFamilies 表。 此表由 UiCreatePatchPackageEx 函数使用。
ImageFamilies 表包含要添加到 Media 表的修补信息。 修补程序将一个条目添加到 Media 表。 ImageFamilies 表中的每条记录都是指一组已更新到最新版本的相关产品映像。
ImageFamilies 表包含以下列。 如果在 Windows Installer 中应用修补程序并且 Patchwiz.dll 为版本 2.0,则可以在 MediaSrcPropName、MediaDiskId 和 FileSequenceStart 列中使用 null 值。
列 | 类型 | 密钥 | Nullable |
---|---|---|---|
系列 | text | Y | N |
MediaSrcPropName | text | Y | |
MediaDiskId | 整型 | Y | |
FileSequenceStart | 整型 | Y | |
DiskPrompt | text | Y | |
VolumeLabel | text | Y |
列
-
Family
-
在此字段中输入的值是一组已更新到最新版本的相关产品映像的标识符。 限制为总共 8 个字母数字字符或下划线。 安装程序在 Windows Installer 修补程序文件(.msp 文件)表中为每个系列嵌入一个文件柜流。 该文件柜包含将目标映像更新为产品的升级映像所需的二进制修补程序和新文件。 安装程序使用 PCW_CAB_ 作为系列名称的前缀,以生成文件柜的流名称,安装程序会将其输入到新 Media 表条目的 Cabinet 字段中。
-
MediaSrcPropName
-
在已升级映像的新 Media 表条目的源字段中输入的值。 仅当使用 Patchwiz.dll 版本 2.0 且 Properties 表 (Patchwiz.dll) 中的 MinimumRequiredMsiVersion 设置为 200 时,此字段才能为 null。
-
MediaDiskId
-
安装程序将此值输入到新 Media 表记录的 DiskId 字段中。 DiskID 值必须大于目标包中的任何当前 DiskID。 MediaDiskId 的限制为 32767。 仅当使用 Patchwiz.dll 版本 2.0 且 Properties 表 (Patchwiz.dll) 中的 MinimumRequiredMsiVersion 设置为 200 时,此字段才能为 null。
-
FileSequenceStart
-
此字段是起始文件的序列号。 同一产品的两个修补程序中不得存在相同的文件序列号。 为确保这一点,此字段中的值必须大于以前的修补程序或原始安装软件包中使用的所有序列号。 通过将修补程序文件柜文件中的条目总数与该修补程序的 FileSequenceStart 编号相加,便可以确定修补程序中的最大序列号。 要确定这一点,可以查看 Patchwiz.dll 在创建修补程序期间生成的 .ddf 文件。 FileSequenceStart 的限制为 32767。 仅当使用 Patchwiz.dll 版本 2.0 且 Properties 表 (Patchwiz.dll) 中的 MinimumRequiredMsiVersion 设置为 200 时,此字段才能为 null。
-
DiskPrompt
-
安装程序将此值输入到新 Media 表记录的 DiskPrompt 字段中。
-
VolumeLabel
-
安装程序将此值输入到新媒体记录的 VolumeLabel 字段中。
备注
修补程序将 .msp 文件中的文件柜名称添加到新记录的 Cabinet 字段(此记录会被添加到 Media 表)。 由于它是嵌入的文件柜,因此名称以“#”字符作为前缀。 修补程序将属性添加到 Media 表中新记录的 Source 字段。 没有两个修补程序可以具有相同的源属性。
在映像系列内共享的文件必须在该系列的每个升级映像中具有相同的文件表键。 在升级的映像之间共享的任何文件表键都必须表示同一文件,并且必须在所有升级的映像中都相同。 文件表键是在 File 表的 File 列中输入的值。
MediaDiskId 和 FileSequenceStart 的限制为 32767。 若要提高此限制,请使用 Msidb.exe 将 ImageFamilies 表导出为 .idt 文件,并将列类型从 i2 更改为 i4,或从 I2 更改为 I4,然后将 .idt 文件导回 .pcp 数据库中。 如果两个包具有不同的列类型,则无法在这两个包之间创建转换和修补程序。