VS Setup Project インストーラーを使用している場合、これは必要以上に少し難しくなりますが、それほど難しくはありません。
最初に行うべきことは、「プライマリ」アプリケーションを選択することです。このアプリケーションのインストーラーは、ユーザーが 3 つすべてをインストールするために呼び出すものであり、他の 2 つを制御します。
ここで、他の 2 つのアプリケーションをそれぞれの MSI ファイルにデプロイします。このプロセスは比較的簡単です。セットアップ ウィザードで必要となる可能性のあるカスタム情報をコマンド ライン パラメータを使用して定義できるようにし、インストールを無人で実行できるようにする必要があります。VS セットアップ プロジェクトでは、これらの両方が可能です。ウィザードで任意のカスタム フィールドのパラメータ名を定義する必要がありますが、無人機能は「無料」であるためです。これらの MSI がビルドされたら、プライマリ アプリのメイン アプリケーション ディレクトリにインストールするファイルとして追加します。
ここで、プライマリ アプリケーションのインストーラーでカスタム アクションを定義する必要があります。これは、System.Configuration.Install.Installer から継承するクラスを作成し、それを RunInstaller 属性で装飾し、このインストーラー クラスのプロジェクトをインストーラーのカスタム アクションのセットとして指定することによって行われます。
Installer クラスで、OnAfterInstall、OnBeforeUninstall、および OnRollback メソッドをオーバーライドします。OnAfterInstall メソッドで Process.Start を呼び出し、インストールする /I オプションを指定して MsiExec.exe を呼び出し、最初のアプリケーションの MSI のパスと名前を渡し、"/q" オプションを指定してインストールをサイレント モードで実行します。設定する必要があるプロパティ (インストール パラメータ、パス、インストール レベル/コンポーネント、アプリ設定など)。他のアプリケーションについて繰り返し、OnBeforeUninstall メソッドと OnRollback メソッドを使用してプロセスを繰り返しますが、/x オプションを指定して MSI をアンインストールします。
完了すると、他の 2 つの MSI を含む 1 つの MSI が作成されます。インストールすると他の 2 つがサイレント インストールされ、アンインストールすると他の 2 つがアンインストールされます。より高度なインストール制御については、ハンドラーのsavedState辞書を調べることで、「インストール」と「変更/修復」を区別できます(修復中は、子アプリを再インストールするのではなく、子アプリを修復する必要があります)。インストール プロセスで [コンポーネント] ダイアログを使用して、他の 2 つのアプリケーションのインストールをオプションにすることができます (情報はカスタム アクション ハンドラーに渡され、1 つまたは両方の MSI をプライマリ アプリ ディレクトリにコピーするかどうかを選択するためにも使用できます)。最後に、OnAfterCommit をオーバーライドして MSI を削除することもできます (ただし、そうすると、