1. ホーム
  2. windows

[解決済み] サーバーに同じWindowsサービスの複数のインスタンスをインストールする

2023-01-11 14:02:55

質問

私たちは、クライアント アプリケーションにデータを供給するための 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 番目にインストールされたコード ベースに対して前のコマンドを実行しました。

2 回とも InstallUtil から次のような出力を受け取りました (関連する部分のみ)。

トランザクテッド インストールを実行中です。

インストールのインストールフェーズを開始します。

サービスApp Service Twoのインストール中... サービス App Service Two は正常にインストールされました。 ログアプリケーションにEventLogソースのApp Service Twoを作成中...

インストール フェーズで例外が発生しました。 System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

インストールのロールバックフェーズが始まっています。

ソース App Service Two のイベント ログを以前の状態に復元しています。 サービス App Service Two はシステムから削除されています...。 サービス App Service Two はシステムから正常に削除されました。

ロールバックフェーズが正常に完了しました。

トランザクテッド インストールが完了しました。 インストールが失敗し、ロールバックが実行されました。

長ったらしい投稿で申し訳ありませんが、十分な関連情報があることを確認したかったのです。 今のところ、私を困らせている部分は、サービスのインストールが正常に完了し、EventLog ソースを作成した後に NullReferenceException がスローされるようだと述べていることです。 もし、誰かが私が間違っていることを知っているか、より良いアプローチを持っているなら、それは非常に感謝されるでしょう。

どのように解決するのですか?

sc / service controller utilを試されましたか? タイプ

sc create

をコマンドラインで実行すると、ヘルプエントリが表示されます。 過去にSubversionでこれをやったことがあると思うのですが、その時は この記事 を参照にしたことがあると思います。

http://svn.apache.org/repos/asf/subversion/trunk/notes/windows-service.txt