API を使用してマージ モジュールをデータベースにマージする
マージ モジュールは、開発者が共有 Windows インストーラー コンポーネントを提供し、アプリケーションにロジックを設定するための標準的な方法を提供します。 マージ モジュールは、マージ ツールを使用してインストール パッケージにマージする必要があります。 最適な方法としては、無料で配布されているマージ ツールを入手するか、独立系ソフトウェア ベンダーが提供しているいずれかのマージ ツールを購入することです。 たとえば、Mergemod.dll で提供されている機能を使用することができます。
Mergemod.dll の API を使用してマージ モジュールを Windows インストーラーのインストール データベースにマージするには、次の手順を順番に行います。
マージ モジュールを Windows インストーラーのインストール データベースにマージする
OpenLog を使用してログ ファイルを開きます。 この手順は、マージ プロセス用にログ ファイルを作成するか、既存のログ ファイルを追加する必要がある場合にのみ必要です。
インストール データベース (.msi ファイル) を開きます。これは、OpenDatabase を使用してマージ モジュールを受け取る際に使用します。 この手順は必須です。
マージ モジュール (.msm ファイル) を開きます。これは、OpenModule を使用してデータ ベースにマージされます。 モジュールをインストール データベースとマージするには、まず開いておく必要があります。 この手順は必須です。
Merge または MergeEx を使用して、モジュールをインストール データベースにマージします。 Merge または MergeEx は、.msi と .msm ファイルの特定の組み合わせをマージするために 1 回のみ呼び出すことができることに注意してください。 MergeEx は、Mergemod.dll バージョン 2.0 以降で使用する場合、および IMsmMerge2 インターフェイスを使用する場合にのみ使用できます。 この手順は必須です。
get_Errors を呼び出し、マージによって発生した競合やその他のエラーが取得したエラーのコレクションにないか調べます。 この取得は、非破壊的処理です。 get_Errors を繰り返し呼び出すと、複数のエラー コレクションのインスタンスが取得されます。 エラーは、実際に発生したケースに応じて解決する必要があります。
マージ モジュールのコンポーネントを、Connect を使用してインストール データベースにマージされた、またはマージされる予定のその他の機能に関連付けます。 このメソッドを呼び出すには、機能がすでに存在している必要があります。 この手順は、追加の機能がある場合にのみ必要です。詳細については、「マージ モジュールを複数の機能に接続する」を参照してください
必要に応じて、次の 1 つまたは複数を実行して、モジュールからソース ファイルを抽出します。
埋め込み.cab ファイルからファイルを抽出し、指定したディレクトリにコピーするには、ExtractFiles または ExtractFilesEx を使用します。 ExtractFilesEx には、Mergemod.dll バージョン 2.0 以降が必要です。
埋め込み.cab ファイルからファイルを抽出し、指定したファイルに保存するには、ExtractCAB を使用します。
モジュールからファイルを抽出し、マージ後にディスク上のソース イメージにコピーするには、CreateSourceImage を使用します。 CreateSourceImage は、Mergemod.dll バージョン 2.0 以降でのみ使用できることに注意してください。
CloseModule を使用して、現在開いているマージ モジュールを閉じます。 この手順は必須です。
CloseDatabase を使用して、現在開いているインストール データベースを閉じます。 この手順は必須です。 データベースを閉じると、すべての依存関係情報がクリアされますが、取得されていないエラーには影響しません。
CloseLog を使用して現在のログ ファイルを閉じます。 この手順は、開いているログ ファイルがある場合に必要です。
Mergemod.dll を使用してモジュールをデータベースにマージした後、メディア テーブルを更新して、目的のソース イメージ レイアウトを記述する必要があります。 マージ モジュールのコンシューマーがソース イメージをレイアウトするさまざまな方法を選択できるため、Mergemod.dll によって提供されるマージ プロセスではメディア テーブルは更新されません。