0

3 つの Windows ベースのアプリケーションがあります。それらを単一の msi ファイルにデプロイする必要があります。最初の 2 つのファイルは、特定のコンピューター名とログイン ユーザー名など、適切なコンピューターのチェックのようなものです。私が抱えている問題は、これら 3 つのアプリケーションすべてを 1 つの msi ファイルに展開するにはどうすればよいかということです。そして、インストールは次のようになります ?: 1: ウィンドウ アプリケーション A をインストールします 2: アプリケーションが正しくインストールされない場合は、インストールを停止し、アプリケーション B とアプリケーション C を削除します。しかし、すべてがうまくいけば、最後のメイン アプリケーションであるアプリケーション C をインストールします。

追加情報: アプリケーション A とアプリケーション B は基本的に、コンピューターのユーザー名と適切な名前をチェックし、指定された値をレジストリに出力します。

事前に助けに感謝します:)

4

1 に答える 1

0

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 を削除することもできます (ただし、そうすると、

于 2012-08-14T16:37:37.007 に答える