マージ モジュールの Directory テーブルの作成

マージ モジュールを .msi ファイルに適用して、インストールにディレクトリを追加することはできますが、既存のディレクトリを置き換えたり削除したりすることはできません。 Directory テーブルでは、マージ モジュールによりターゲット インストールに提供されるディレクトリのレイアウトを指定します。 Directory テーブルはあらゆるマージ モジュールで必須です。

マージ モジュールで Directory テーブルを作成する場合は、次のガイドラインに従います。 詳細については、Directory テーブルに関するページと Directory テーブルの使用に関するページを参照してください。

  • マージ モジュールによって追加されるディレクトリ構造には、1 つのルート ディレクトリが必要です。 ルートには TARGETDIR という名前を付ける必要があります。 ユーザーは、マージ中に TARGETDIR の値を変更して、モジュールのディレクトリ構造をターゲットのディレクトリ ツリーにアタッチする場所を指定できます。

  • Directory テーブル以外のマージ モジュール テーブルでは、ディレクトリの場所を TARGETDIR に直接参照することはできません。 TARGETDIR の値がユーザーによって変更されると、このような参照の場所が変更されます。

  • マージ モジュール内のテーブルでは、TARGETDIR の子ディレクトリ、またはマージ モジュールのツリー内にある別のディレクトリの場所を参照する必要があります。 マージ モジュール内のディレクトリの親として TARGETDIR を指定するには、次の操作を行います。 Directory 列にディレクトリを入力し、Directory_Parent 列に「TARGETDIR」と入力します。 DefaultDir 列で "." 表記を使用して、このディレクトリが TARGETDIR にあり、サブディレクトリがないことを示します。 詳しくは、Directory テーブルの使用に関するページをご覧ください。

  • マージ モジュールによって追加されるディレクトリの名前は、「マージ モジュール データベースでの主キーの名前付け」で説明されている名前付け規則を使用する必要があります。 これには、SystemFolder プロパティや ProgramFilesFolder プロパティなどのプロパティによって定義済みのディレクトリが含まれます。

  • Directory テーブル内のすべてのエントリ (TARGETDIR を除く) に GUID を追加します。これには、Windows インストーラー SystemFolder プロパティ (たとえば、SystemFolder.00000000_0000_0000_0000_000000000000) を指定する Directory テーブル エントリが含まれます。 ライブラリ Mergemod.dll により、SystemFolder プロパティを設定するためのカスタム アクションが追加されます。

  • 定義済みのディレクトリがマージ モジュールに含まれている場合、マージ ツールによってターゲット データベースにカスタム アクションの種類 51 が自動的に追加されます。 マージ モジュールの作成者は、CustomAction テーブルも含まれていることを確認する必要があります。 CustomAction テーブルは空の場合がありますが、このテーブルはターゲット データベースに存在する必要があり、変更された定義済みディレクトリが正しい場所に書き込まれるようにします。 たとえば、システム ディレクトリがマージ モジュールに含まれている場合、マージ モジュールの作成者は、Custom Action テーブルが存在することを確認する必要があります。

    これらの種類 51 カスタム アクションの生成に対応するアルゴリズムでは、ディレクトリ名が定義済みの SystemFolder プロパティのいずれかで始まるかどうかのみが確認されることに注意してください。 ディレクトリ名がディレクトリ プロパティと厳密に等しいかどうかは確認されません。 これらの標準フォルダー名のいずれかで始まるディレクトリは、名前の残りの部分が GUID ではない場合でも、種類 51 カスタム アクションを取得します。 作成者は、このことによって、SystemFolder プロパティのいずれかで始まる派生主キーに対して、誤検知の一致や意図しないカスタム アクションの生成が発生しないように注意する必要があります。

マージ モジュール内の Directory テーブルと、予想される解決済みディレクトリの例を次に示します。

ディレクトリ Directory_Parent DefaultDir
TARGETDIR   SourceDir
Dir00.BC82E350_ C7FC_11d1_ A848-006097ABDE17 TARGETDIR .:MMM_Prog
SystemFolder.BC82E350_ C7FC_11d1_ A848-006097ABDE17 TARGETDIR MMM_Sys
Dir02.BC82E350_ C7FC_11d1_ A848-006097ABDE17 Dir00.BC82E350_ C7FC_11d1_ A848_006097ABDE17 MFC_OCX

 

上記の Directory テーブルを持つマージ モジュールでは、次のディレクトリ構造になることが予想されます。

ディレクトリ 移行先 source
Dir00.BC82E350_ C7FC_11d1_ A848-006097ABDE17 [マージ モジュールのインストール ポイント]\ [マージ モジュールのソース ポイント]\MMM_Prog
SystemFolder.BC82E350_ C7FC_11d1_ A848-006097ABDE17 [SystemFolder]\ [マージ モジュールのソース ポイント]\MMM_Sys
Dir02.BC82E350_ C7FC_11d1_ A848-006097ABDE17 [マージ モジュールのインストール ポイント]\MFC_OCX [マージ モジュールのソース ポイント]\MMM_Prog\MFC_OCX