同時インストール
同時インストール (別名: 入れ子インストール) は、Windows インストーラーの非推奨の機能です。 同時インストールでインストールされたアプリケーションは、顧客が正しく保守することが難しいため、最終的に問題となる可能性があります。 一般リリースする予定の製品をインストールする場合、同時インストールは使用しないでください。 同時インストールを、一般リリースする予定がないアプリケーションのインストールに使用する場合、管理された企業環境では、その適用性が制限される可能性があります。 一般配布用ではないアプリケーションで同時インストールを使用したいパッケージ作成者向けに、同時インストールに関するドキュメントが提供されています。
同時インストール アクションでは、実行されるインストール中に別の Windows インストーラー パッケージがインストールされます。 CustomAction テーブルに同時インストール アクションを作成し、そのカスタム アクションをシーケンス テーブルにスケジュールすることで、同時インストールがパッケージに追加されます。 CustomAction テーブルの Target フィールドには、同時インストールで使用されるパブリック プロパティ設定の文字列が含まれます。 CustomAction テーブルの Source フィールドにより、同時パッケージが識別されます。 同時インストール アクションでは、現在のアプリケーションのインストール パッケージによってインストールされたアプリケーションのみを再インストールまたは削除できます。
同時インストール アクションの種類は、CustomAction テーブルの Type フィールドで指定します。 同時アプリケーションのパッケージは、カスタム アクションの種類に応じて、メイン パッケージのサブストレージに配置すること、プロパティで指定した場所にファイルとして配置すること、またはユーザーのマシンにアドバタイズされたアプリケーションとして配置することができます。 次の種類のカスタム アクションは、同時インストールを実行します。
カスタム アクションの種類 | 説明 |
---|---|
カスタム アクションの種類 7 | インストール パッケージに存在する製品の同時インストール。 |
カスタム アクションの種類 23 | 現在のソース ツリー内のインストーラー パッケージの同時インストール。 |
カスタム アクションの種類 39 | アドバタイズされたインストーラー パッケージの同時インストール。 |
同時インストールでは、メイン インストールと同じユーザー インターフェイスとログ設定が共有されます。
同時インストール アクションは、メイン インストールのアクション シーケンスの InstallInitialize アクションと InstallFinalize アクションの間に配置する必要があります。 メイン インストールのロールバック時に、インストーラーは同時インストールもロールバックします。 インストーラーは、同時インストールとメイン インストールのロールバック情報を組み合わせるため、同時インストール アクションで遅延実行を使用する必要はありません。 ロールバック インストールでは、すべての変更が元に戻されます。
同時インストール アクションの戻り値は、他のカスタム アクションと同じです。 「カスタム アクションの戻り値」を参照してください。
システムの自動再起動を指定する、またはユーザーに再起動を要求する標準アクションまたはカスタム アクションでは、同時インストール内からも再起動または要求を実行できます。
インストーラーは、同時インストールを開始すると、同時インストールが完了するまで、およびメイン インストールを続行する前に、他のすべてのインストールをロックアウトします。 インストーラーは、同期カスタム アクションとしてのみ同時インストールを実行できます。 「同期/非同期カスタム アクション」を参照してください。 「カスタム アクションの戻り処理オプション」で説明されているオプション フラグは、なし (+0) または msidbCustomActionTypeContinue (+64) に設定する必要があります。
同時インストール アクションでは、通常インストールで MsiInstallProduct を使用するのと同じ方法で、ローカルで実行するアプリケーション、ソースから実行するアプリケーション、再インストールするアプリケーション、または削除するアプリケーションをインストールできます。 インストールの種類を指定するには、同時インストール アクションに ADDLOCAL、ADDSOURCE、REINSTALL、または REMOVE プロパティを渡します。
同時インストール アクションは、アクションのペアで作成できます。一方のアクションはインストールに使用され、もう一方のアクションは同時インストールの削除に使用されます。 インストールには、カスタム アクションの種類 7 またはカスタム アクションの種類 23 が通常は使用されます。 親製品のアンインストール時に同時インストールを削除するために、カスタム アクションの種類 39 が通常は使用されます。 CustomAction テーブルの削除カスタム アクションのレコードで、Source フィールドに製品コードの GUID を含めることができ、Target フィールドに "REMOVE=ALL" を含めることができます。 2 つのカスタム アクションは、相互に排他的な条件を使用してアクション シーケンス テーブルで作成する必要があります。 たとえば、製品をインストールするカスタム アクションの Condition フィールドには "NOT Installed" を設定でき、同時インストールを削除するカスタム アクションの Condition フィールドには REMOVE="ALL" を設定できます。
パッケージのコストをクエリする方法はありません。 これにより、同時インストールのコスト計算が難しくなります。 同時インストールに関連するコンポーネントのフォルダーと最悪の場合のコストを示すために、行を ReserveCost テーブルに追加する必要があります。
同時インストール アクションで使用できるカスタム アクションの戻り処理オプションは、なし (+0) または msidbCustomActionTypeContinue (+64) のみです。
親インストールでは、同時インストール アクションとして独自のパッケージを呼び出すことができないので注意してください。
マシンごとのインストールでユーザーごとの同時インストールを実行しようとすると、インストーラーは既定で親インストールをユーザーごとに登録します。 これが原因で、インストーラーがアプリケーションを誤って削除することがあります。これは、アプリケーションが実際にはユーザーごとに登録されているにもかかわらず、インストーラーがマシンごとにアプリケーションをアンインストールしようとするためです。 同時インストールの状態をその親インストールの状態と同期させるには、CustomAction テーブルの Target 列に ALLUSERS="[ALLUSERS]" と入力します。 この場合、親インストールがマシンごとの場合は同時インストールもマシンごととなり、親インストールがユーザーごとの場合は同時インストールもユーザーごととなります。
開発者は、同時インストールを作成するときに、次の警告に注意する必要があります。
- 同時インストールでは、コンポーネントを共有できません。
- 管理インストールに同時インストールを含めることはできません。
- パッチ適用とアップグレード処理は、同時インストールでは機能しない場合があります。
- インストーラーが、同時インストールのコストを適切に計算しない場合があります。
- 統合 ProgressBars は、同時インストールでは使用できません。
- アドバタイズされるリソースは、同時インストールではインストールできません。
- 親製品がアンインストールされるとき、アプリケーションの同時インストールを実行するパッケージで、同時アプリケーションのアンインストールも実行する必要があります。
パッケージが同時インストールとしてインストールされないようにするには、LaunchCondition テーブルに次のいずれかの条件付きステートメントを追加します。 これにより、別のインストールによって実行される同時インストール アクションで、パッケージがインストールされなくなります。 このようにしても、RemoveExistingProducts アクションでパッケージを削除できます。 ParentOriginalDatabase プロパティと ParentProductCode プロパティも参照してください。
"Not ParentProductCode"
"Not ParentOriginalDatabase"