对压缩包、File 表和 Media 表中的文件序列号进行排序

File 表包含安装的所有源文件的完整列表。 可以将文件以单个文件的形式存储在源介质上,也可将其压缩在压缩包文件中。 File 表的 Sequence 列中的序列号与 Media 表的 LastSequence 字段一起,指定了文件安装顺序以及每个文件所在源介质的安装顺序。 Media 表中的每条记录都标识相关源磁盘,即包含满足以下条件的所有文件的源磁盘:文件序列号小于或等于 LastSequence 列中显示的值且大于上一个磁盘的 LastSequence 值。

例如,假设某一文件在 File 表的 Sequence 列中输入了序列号 92。 若要确定此文件驻留在哪个源磁盘上,安装程序会检查 Media 表的记录,找出含有大于 92 的最小 LastSequence 值的条目。 DiskId 列是 Media 表的主键,此字段唯一地标识表中的磁盘。

Windows Installer 包的 File 表中可列出的文件数的最大限制为 32767 个文件。 若要创建包含更多文件的 Windows Installer 包,请参阅创作大型包

包作者可以通过压缩源文件并将其包含在压缩包文件中来减小其安装包大小。 源文件映像可以压缩、解压缩,也可以混合这两种类型。 有关压缩源和未压缩源的详细信息,请参阅请压缩源和未压缩源。 压缩的源文件必须存储在压缩包文件中。 压缩包中的压缩文件具有其自己的内部序列号。 这些内部序列号的值不需要与 File 表中序列号的值匹配。 但是,File 表中指定文件的顺序必须与压缩包中文件的实际顺序相同。 未压缩文件的序列号无需具有唯一性。 例如,如果所有文件均未压缩并驻留在一个磁盘上,则所有文件都可以在 File 表中拥有相同序列号。

Media 表描述了构成安装源介质的磁盘集。 Media 表中的第一个条目在 DiskId 字段中必须始终为 1。 文件应在源介质上进行整理,以便磁盘 1 上所有文件的 File 表序列号都小于磁盘 2 上文件的序列号,而磁盘 2 上的所有序列号都应小于磁盘 3 上的序列号,依此类推。 此要求也适用于同时包含压缩源和未压缩源的磁盘。 例如,如果安装的介质源位于两个源磁盘上,并且磁盘 1 同时包含未压缩文件和一个压缩包文件,则未压缩文件和压缩包中的文件序列号必须小于磁盘 2 上存储的任何文件的最小文件序列号。 如果磁盘 1 上的所有文件都压缩在一个压缩包文件中,则可创作 Media 表,如下表中所示。

Media 表(部分)

DiskId LastSequence DiskPrompt Cabinet VolumeLabel
1 5 1 mycab.cab 磁盘 1
2 10 2 磁盘 2

 

如果磁盘 1 上的某些文件压缩在一个压缩包中,而有些文件未压缩,则可按如下所示创作 Media 表。

Media 表(部分)

DiskId LastSequence DiskPrompt Cabinet VolumeLabel
1 5 1 磁盘 1
2 10 1 mycab.cab 磁盘 1
3 15 2 磁盘 2

 

请注意,以下 Media 表中的创作不正确,因为它指定了磁盘 2 上的某些文件序列号,而这些序列号小于磁盘 1 上的压缩包中的某些文件。

Media 表

DiskId LastSequence DiskPrompt Cabinet VolumeLabel
1 5 1 磁盘 1
2 10 2 磁盘 2
3 15 1 mycab.cab 磁盘 1

 

大型文件可以拆分为两个或多个文件。 跨到下一个压缩包文件的任何压缩包文件中都不能超过 15 个文件。 例如,如果你有三个压缩包文件,则第一个压缩包可以有 15 个文件跨到第二个压缩包文件,第二个压缩包可以有 15 个文件跨到第三个压缩包文件。 向文件多个压缩包的 File 表添加记录时,请使用文件的第一部分指定在 Sequence 列中输入的文件序列号。

如果有三个文件、两个压缩包和两个磁盘,则可以按如下方式创作 File 表和 Media 表。 在此例中,c1.cab 驻留在 disk1 上,c2.cab 驻留在 disk2 上。 文件 f2 跨两个压缩包。 c1.cab 压缩包包含整个 f1 文件和 f2 文件的第一部分。 c2.cab 压缩包包含 f2 的第二部分和整个 f3 文件。

Media 表(部分)

DiskId LastSequence DiskPrompt Cabinet VolumeLabel
1 5 1 c1.cab 磁盘 1
2 10 2 c2.cab 磁盘 2

 

File 表(部分)

文件 序列
f1 1
f2 2
f3 6