Share via


キャビネット ファイルをインストールに含める

このセクションでは、キャビネット ファイルをインストールに含める方法について説明します。 詳しくは、「キャビネットと圧縮されたソースの使用」を参照してください。

キャビネット ファイルをインストール パッケージに含めるには

  1. キャビネット作成ツールを使用して、ソース ファイルをキャビネット ファイルに圧縮します。 「キャビネット ファイル」を参照してください。
  2. キャビネット ファイルは、.msi ファイル内のデータ ストリームに配置するか、Directory テーブルで指定されたソース ツリーのルートにある別のキャビネット ファイルに配置する必要があります。
  3. ソースが圧縮型であるか、圧縮されていないファイルと圧縮されたファイルの両方を含む混合型であるかを判断します。 「圧縮されたソースと圧縮されていないソース」を参照してください。 ソース イメージの種類に応じて、Word Count Summary プロパティの圧縮されたフラグ ビットまたは圧縮されていないフラグ ビットを設定します。
  4. キャビネット内のファイルごとに、レコードを File テーブル に追加します。 File 列に、キャビネット内のファイルのファイル キーと完全に一致するファイル キーを入力します。 ファイル キーでは大文字と小文字が区別されます。 File テーブルとキャビネット内のファイル インストール シーケンスも同じである必要があります。 ファイル シーケンスは、Sequence 列のシーケンス番号で指定します。 キャビネット内の最初のファイルのシーケンス番号に到達するには、次の操作を行います。 DiskID 列の最大の値を持つ Media テーブル 内の既存のレコードを検索します。 このレコードの LastSequence フィールドは、メディアで使用される最後のファイル シーケンス番号を示します。 File テーブルで、新しいキャビネットの最初のファイルに、これより大きいシーケンス番号を割り当てます。 キャビネット ファイルと同じ順序で、残りのすべてのファイルにシーケンス番号を割り当てます。 残りのレコード フィールドの説明については、「File テーブル」を参照してください。
  5. キャビネットの Media テーブルにレコードを追加します。 この新しいレコードの DiskID フィールドに、テーブルに既に存在する最大の DiskID 値より大きい値を指定します。 キャビネットの名前を Cabinet フィールドに入れます。 この名前は Cabinet データ型の形式である必要があります。 キャビネットが .msi ファイルに格納されているデータ ストリームである場合は、名前の先頭に番号記号 "#" を付けます。 キャビネットがデータ ストリームの場合、キャビネットの名前では大文字と小文字が区別されることに注意してください。 キャビネットが別のファイルの場合、ファイルの名前では大文字と小文字は区別されません。
  6. 更新された File テーブルの Sequence 列を確認して、新しいキャビネット内で最大のファイル シーケンス番号を確認します。 これより大きい値を、Media テーブルの新しいレコードの LastSequence フィールドに入力します。 残りのレコード フィールドの説明については、「Media テーブル」を参照してください。
  7. キャビネット ファイルは、Msidb.exe などのツールを使用するか、インストーラーのデータベース関数を使用して、インストール パッケージに格納できます。 次の 4 つの手順では、データベース関数を使用してプログラムからキャビネットを追加する方法について説明します。
  8. プログラムからキャビネットをインストール パッケージに追加するには、MsiDatabaseOpenView を使用してデータベースの _Streams テーブルのビューを開きます。
  9. MsiRecordSetString を使用して、_Streams テーブルの Name 列を Media テーブルの Cabinet 列に表示される名前に設定します。 番号記号 # を省略します。
  10. MsiRecordSetStream を使用して、_Streams テーブルの Data 列をキャビネットのデータに設定します。
  11. MsiViewModify を使用して、_Streams テーブルのレコードを更新します。
  12. Msidb.exeを使用して、Mydatabase.msi という名前のインストール パッケージにキャビネット ファイル Mycab.cab を追加するには、コマンド ライン Msidb.exe -d mydatabase.msi -a mycab.cab を使用します。 この場合、Media テーブルの Cabinet 列には、#mycab.cab という文字列が含まれている必要があります。