13

目的:1台のマシンに複数のインスタンスがある可能性のあるWindowsサービスをサポートするには、セットアッププロジェクトを使用して、次の機能を備えたMSIを作成します。

  1. サービス名のユーザー入力を受信する
  2. インストールサービス
  3. サービス名を1からシリアル化する(適切な名前をロギングとアンインストールで使用できるようにするため)

私の最初の望みは、App.configでサービス名を設定することでした(そして、ServiceInstallerのインスタンス化時にアンインストール中にそれを取得します。インストール中にアクセスできないため、これは単純なようです。

MyInstallerがInstallerを拡張する場合、base.Install();を呼び出すことができます。ただし、app.configに書き込もうとすると(MyInstaller.Install()内およびbase.Install()の後)、効果がありません。

そのため、サービスはカスタムサービス名でインストールできますが、その名前はシリアル化されておらず、アンインストール時にインストーラーが最も不快になります。

これはどのように行う必要がありますか?

4

1 に答える 1

9

インストーラーのアクションにパラメーターを指定できるので、サービス名を取得し、パラメーターとしてアクションに渡します。次に、Installerクラスで、 を介してオーバーライドInstall()してアクセスできますbase.Context.Parameters。それが値を取得する方法です。その値を取得して使用したら、それをstateSaver IDictionaryパラメーターに入れて、オーバーライドUninstall()すると、インストール時に使用された値を見つけることができます。

于 2009-07-08T08:57:50.427 に答える