在安裝中包含封包檔案

本節說明在安裝中包含封包檔案。 如需詳細資訊,請參閱 使用封包和壓縮來源

若要在安裝套件中包含封包檔案

  1. 使用封包建立工具,將來源檔案壓縮成封包檔案。 請參閱 封包檔案
  2. 封包檔案必須位於.msi檔案內的數據流中,或位於目錄數據表指定來源樹狀目錄根目錄的個別封包檔案中。
  3. 判斷來源是否為壓縮類型,或是同時具有未壓縮和壓縮檔案的混合類型。 請參閱 壓縮和未壓縮的來源。 根據來源影像的類型,設定 Word Count Summary 屬性的壓縮或未壓縮旗標位。
  4. 將記錄新增至 封包中每個檔案的 [檔案] 資料表 。 在 [檔案] 資料行中輸入與封包中檔案之檔案金鑰完全相符的檔案索引鍵。 檔案金鑰會區分大小寫。 檔案數據表和封包中的檔案安裝順序也必須相同。 檔案序列是由 Sequence 資料行中的序號所指定。 若要到達封包中第一個檔案的序號,請執行下列動作。 在 Media 資料表尋找具有 DiskID 資料行中最大值的現有記錄。 此記錄的 LastSequence 字段會提供媒體上所使用的最後一個檔案序號。 在 [檔案] 數據表中,將新封包的第一個檔案指派大於這個的序號。 將序號指派給所有剩餘的檔案,順序與封包檔案中的順序相同。 如需其餘記錄欄位的描述,請參閱 檔案數據表
  5. 將記錄新增至 內閣的 Media 數據表 。 指定這個新記錄之 DiskID 欄位中的值,該值大於數據表中已經存在的最大 DiskID 值。 將內閣的名稱放入內閣欄位。 此名稱的格式必須是 Cabinet 資料類型。 如果封包是儲存在.msi檔案中的數據流,請在名稱前面加上數位符號 “#”。 請注意,如果封包是數據流,封包的名稱會區分大小寫。 如果封包是個別的檔案,則檔案的名稱不會區分大小寫。
  6. 檢查更新的 [檔案] 資料表的 [序列] 資料行,以判斷新封包中最大的檔案序號。 在 Media 數據表新記錄的 LastSequence 字段中輸入大於此值的值。 如需其餘記錄欄位的描述,請參閱 媒體數據表
  7. 您可以使用 Msidb.exe 之類的工具,或使用安裝程式的 Database Functions,將封包檔案儲存在安裝套件中。 下列四個步驟說明如何使用資料庫函式,從程式新增封包。
  8. 若要從程式將封包新增至安裝套件,請使用 MsiDatabaseOpenView 開啟資料庫_Streams數據表上的檢視。
  9. 使用 MsiRecordSetString,將_Streams數據表的 Name 數據行設定為 Media 數據表的 [封包] 資料行中顯示的名稱。 省略數字符號: #。
  10. 使用 MsiRecordSetStream ,將_Streams數據表的 [數據] 資料行設定為封包的數據。
  11. 使用 MsiViewModify 更新_Streams數據表中的記錄。
  12. 若要使用 Msidb.exe 將封包檔案Mycab.cab新增至名為 Mydatabase.msi 的安裝套件,請使用下列命令行:Msidb.exe -d mydatabase.msi -a mycab.cab。 在此情況下,Media 資料表的 Cabinet 資料行應該包含字串:#mycab.cab。