そこで、クライアントアプリケーションにデータを供給するWindowsサービスを作成し、すべてが順調に進んでいます。クライアントは、同じサーバー上で実行され、別々のデータベースを指すように構成されたこのサービスの2つのインスタンスを必要とする楽しい構成要求を考え出しました。
これまでのところ、これを実現することはできず、仲間のstackoverflowメンバーがその理由についていくつかのヒントを与えることができることを望んでいました。
現在の設定:
Windowsサービスを含むプロジェクトを設定しました。これをAppServiceと呼び、カスタムインストール手順を処理するProjectInstaller.csファイルを使用して、App.configのキーに基づいてサービス名を設定します。 :
this.serviceInstaller1.ServiceName = Util.ServiceName;
this.serviceInstaller1.DisplayName = Util.ServiceName;
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
この場合、Utilは静的クラスであり、構成ファイルからサービス名をロードします。
ここからは、両方のサービスをインストールするために2つの異なる方法を試しましたが、どちらも同じ方法で失敗しました。
最初の方法は、サービスの最初のコピーをインストールし、インストールされたディレクトリをコピーして名前を変更し、目的のサービス名を変更するようにアプリ構成を変更した後、次のコマンドを実行することでした。
InstallUtil.exe /i AppService.exe
それがうまくいかなかったとき、私は2番目のインストーラープロジェクトを作成しようとし、設定ファイルを編集して、2番目のインストーラーをビルドしました。インストーラーを実行したところ、正常に機能しましたが、services.mscにサービスが表示されなかったため、前のコマンドを2番目にインストールされたコードベースに対して実行しました。
どちらの場合も、InstallUtilから次の出力を受け取りました(関連パーツのみ)。
トランザクションインストールの実行。
インストールのインストール段階を開始します。
Service App Service Twoをインストールしています... Service App Service Twoが正常にインストールされました。EventLog source App Service Twoをログアプリケーションに作成しています...
インストール段階で例外が発生しました。System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。
インストールのロールバック段階が始まります。
ソースApp Service 2のイベントログを以前の状態に復元します。Service App Service Twoがシステムから削除されています... Service App Service Twoはシステムから正常に削除されました。
ロールバックフェーズが正常に完了しました。
トランザクションによるインストールが完了しました。インストールが失敗し、ロールバックが実行されました。
投稿が長くてごめんなさい、十分な関連情報があることを確認したかったのです。これまでのところ困惑しているのは、サービスのインストールが正常に完了したことと、NullReferenceExceptionがスローされたように見えるEventLogソースを作成した後にのみであるということです。だから誰かが私が間違っていることを知っているか、より良いアプローチがあれば、それは非常に高く評価されます。
http://journalofasoftwaredev.wordpress.com/2008/07/16/multiple-instances-of-same-windows-service/
。インストーラーにコードを挿入して、installutilの実行時に必要なサービス名を取得できます。