排序封包、檔案資料表和媒體資料表中的檔案序號

[檔案] 資料表包含安裝之所有來源檔案的完整清單。 檔案可以儲存在來源媒體上,做為個別檔案或在 封包檔案內壓縮。 [檔案] 資料表之 [序列] 資料行中的序號,以及 [媒體] 資料表的 [LastSequence] 欄位,指定每個檔案所在檔案的安裝順序和來源媒體的順序。 Media 資料表中的每個記錄都會識別來源磁片,其中包含序號小於或等於 LastSequence 資料行中顯示的值且大於上一個磁片 LastSequence 值的所有檔案。

例如,假設檔案在 [檔案] 資料表的 [序列] 資料行中輸入的序號為 92。 若要判斷此檔案所在的來源磁片,安裝程式會檢查媒體資料表的記錄,其中的專案具有大於 92 的最小 LastSequence 值。 DiskId 資料行是 Media 資料表的主鍵,此欄位可唯一識別資料表中的磁片。

Windows Installer 套件的 [檔案] 資料表中可列出的檔案數目上限為 32767 個檔案。 若要建立包含更多檔案的 Windows Installer 套件,請參閱 撰寫大型套件

套件作者可以壓縮原始程式檔,並將它們包含在封包檔案中,以減少其安裝套件的大小。 原始程式檔映射可以壓縮、解壓縮或混合這兩種類型。 如需壓縮和未壓縮來源的詳細資訊,請參閱 壓縮和未壓縮的來源。 壓縮的原始程式檔必須儲存在封包檔案內。 封包內的壓縮檔案有自己的內部序號。 這些內部序號的值不需要符合 File 資料表中序號的值。 不過,File 資料表中指定的檔案順序必須與封包內檔案的實際序列相同。 未壓縮檔案的序號不是唯一的。 例如,如果所有檔案都未壓縮且位於一個磁片上,則所有檔案都可以在 [檔案] 資料表中具有相同的序號。

媒體資料表描述組成安裝來源媒體的磁片集。 Media 資料表中的第一個專案在 DiskId 欄位中必須一律有 1。 檔案應該組織在來源媒體上,讓磁片 1 上的所有檔案都有小於磁片 2 上檔案序號的檔案資料表序號,而磁片 2 上的所有序號都應該小於磁片 3 等。 此需求也適用于包含壓縮和未壓縮來源的磁片。 例如,如果安裝的媒體來源位於兩個來源磁片上,而如果磁片 1 同時包含未壓縮的檔案和封包檔案,則封包中的檔案和封包中的檔案的序號必須小於儲存在磁片 2 上之最小檔案序號的序號。 如果磁片 1 上的所有檔案都壓縮在封包檔案中,則可撰寫媒體資料表,如下表所示。

媒體資料表 (部分)

DiskId LastSequence DiskPrompt 內閣 VolumeLabel
1 5 1 mycab.cab 磁片 1
2 10 2 磁片 2

 

如果磁片 1 上的某些檔案會壓縮在封包中,但有些檔案未壓縮,則媒體資料表的撰寫方式如下。

媒體資料表 (部分)

DiskId LastSequence DiskPrompt 內閣 VolumeLabel
1 5 1 磁片 1
2 10 1 mycab.cab 磁片 1
3 15 2 磁片 2

 

請注意,下列媒體表格中的撰寫不正確,因為它指定磁片 2 上的一些檔案序號,小於磁片 1 上某些檔案。

媒體表格

DiskId LastSequence DiskPrompt 內閣 VolumeLabel
1 5 1 磁片 1
2 10 2 磁片 2
3 15 1 mycab.cab 磁片 1

 

大型檔案可以在兩個或多個封包檔案之間分割。 任何跨越到下一個封包檔案的封包檔案中不能超過 15 個檔案。 例如,如果您有三個封包檔案,則第一個封包可以有 15 個跨越至第二個封包檔案的檔案,而第二個封包可以有 15 個跨越第三個封包檔案的檔案。 當您將記錄新增至檔案多個封包的 [檔案] 資料表時,請使用檔案的第一個部分來指定您在 [順序] 資料行中輸入的檔案序號。

如果有三個檔案、兩個封包和兩個磁片,就可以撰寫檔案和媒體資料表,如下所示。 在此範例中,c1.cab位於 disk1,而c2.cab位於 disk2。 檔案 f2 跨越這兩個封包。 c1.cab封包包含整個 f1 檔案和檔案 f2 的第一個部分。 c2.cab封包包含 f2 和整個 f3 檔案的第二個部分。

媒體資料表 (部分)

DiskId LastSequence DiskPrompt 內閣 VolumeLabel
1 5 1 c1.cab 磁片 1
2 10 2 c2.cab 磁片 2

 

檔案資料表 (部分)

檔案 順序
f1 1
f2 2
f3 6