キャビネット、File テーブル、Media テーブルでファイル シーケンス番号の順序を指定する

File テーブルには、インストール用にすべてのソース ファイルの完全な一覧が含まれています。 ファイルは、ソース メディアに個別のファイルとして格納することも、キャビネット ファイル内に圧縮することもできます。 File テーブルの Sequence 列のシーケンス番号と Media テーブルの LastSequence フィールドの組み合わせで、ファイルのインストール順序と、各ファイルが含まれるソース メディアの両方を指定します。 Media テーブルの各レコードで識別されるソース ディスクには、シーケンス番号が LastSequence 列で示されている値以下で、前のディスクの LastSequence 値より大きい、すべてのファイルが含まれます。

たとえば、あるファイルは、File テーブルの Sequence 列に入力されているシーケンス番号が 92 であるとします。 このファイルが存在するソース ディスクを特定するため、インストーラーは、Media テーブルのレコードで、LastSequence の値が 92 より大きくて最も小さいエントリをチェックします。 DiskId 列は Media テーブルの主キーであり、このフィールドはテーブル内のディスクを一意に識別します。

Windows インストーラー パッケージの File テーブルで指定できるファイルの数の上限は、32,767 ファイルです。 より多くのファイルを含む Windows インストーラー パッケージを作成するには、「大きなパッケージの作成」をご覧ください。

パッケージ作成者は、ソース ファイルを圧縮してキャビネット ファイルに格納することで、インストール パッケージのサイズを小さくできます。 ソース ファイル イメージは、圧縮、非圧縮、または両方の種類の組み合わせにすることができます。 圧縮されたソースと圧縮されていないソースについて詳しくは、「圧縮されたソースと圧縮されていないソース」をご覧ください。 圧縮されたソース ファイルは、キャビネット ファイル内に格納する必要があります。 キャビネット内の圧縮ファイルは、独自の内部シーケンス番号を持っています。 これらの内部シーケンス番号の値は、File テーブル内のシーケンス番号の値と一致する必要はありません。 ただし、File テーブルで指定されているファイルのシーケンスは、キャビネット内のファイルの実際のシーケンスと同じである必要があります。 圧縮されていないファイルのシーケンス番号は、一意である必要はありません。 たとえば、すべてのファイルが圧縮されていなくて、1 つのディスク上に存在する場合、すべてのファイルについて File テーブルのシーケンス番号が同じでもかまいません。

Media テーブルでは、インストールのソース メディアを構成するディスクのセットについて記述されています。 Media テーブルの最初のエントリは、DiskId フィールドの値が常に 1 である必要があります。 ファイルは、ソース メディア上で、ディスク 1 のすべてのファイルの File テーブルのシーケンス番号が、ディスク 2 のファイルのシーケンス番号より小さく、ディスク 2 のすべてのシーケンス番号がディスク 3 より小さい、といったように、編成されている必要があります。 この要件は、圧縮されたソースと圧縮されていないソースの両方を含むディスクにも適用されます。 たとえば、インストール用のメディア ソースが 2 つのソース ディスクに格納されていて、ディスク 1 に圧縮されていないファイルとキャビネット ファイルの両方が含まれている場合、圧縮されていないファイルとキャビネット内のファイルの両方に、ディスク 2 に格納されているファイルの最小ファイル シーケンス番号より小さいシーケンス番号が設定されている必要があります。 ディスク 1 のすべてのファイルがキャビネット ファイルに圧縮されている場合は、次の表で示すように Media テーブルを作成できます。

Media テーブル (一部)

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

 

ディスク 1 の一部のファイルがキャビネットに圧縮され、一部が圧縮されていない場合は、次のように Media テーブルを作成できます。

Media テーブル (一部)

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

 

次のように Media テーブルを作成するのは、ディスク 2 の一部のファイルにディスク 1 のキャビネット内の一部のファイルより小さいシーケンス番号が指定されているため、正しくありません。

Media テーブル

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

 

大きなファイルは、2 つ以上のキャビネット ファイルに分割できます。 どのキャビネット ファイルでも、15 個より多くのファイルが次のキャビネット ファイルにまたがることはできません。 たとえば、3 つのキャビネット ファイルがある場合、1 つ目のキャビネットの 15 個のファイルが 2 つ目のキャビネット ファイルにまたがることができ、2 つ目のキャビネットの 15 個のファイルが 3 つ目のキャビネット ファイルにまたがることができます。 複数のキャビネットにまたがるファイルのレコードを File テーブルに追加する場合は、ファイルの最初の部分を使って、Sequence 列に入力するファイル シーケンス番号を指定します。

3 つのファイル、2 つのキャビネット、2 つのディスクがある場合は、次のように File テーブルと Media テーブルを作成できます。 この例では、c1.cab は disk1 に存在し、c2.cab は disk2 に存在します。 ファイル f2 は両方のキャビネットにまたがっています。 c1.cab キャビネットには、ファイル f1 の全体と、ファイル f2 の最初の部分が含まれています。 c2.cab キャビネットには、f2 の 2 番目の部分と、ファイル f3 の全体が含まれています。

Media テーブル (一部)

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

 

File テーブル (一部)

ファイル シーケンス
f1 1
f2 2
f3 6