単一の Windows 実行可能ファイルで複数のサービスをホストできますか?

StackOverflow https://stackoverflow.com/questions/1688275

質問

私の質問は基本的に次の質問と同じですが、答えは役に立ちませんでした。

.NET Windows サービス - 1 つのプロジェクト内の複数のサービス

基本的に、「Service1」、「Service」、「Service3」という 3 つのサービスがあります。

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
                                {
                                    new Service1("Service1"),
                                    new Service2("Service2"),
                                    new Service3("Service3")
                                };

ServiceBase.Run(ServicesToRun);

また、これらの各サービスに対応するserviceinstaller.servicename = "servicex"を備えたインストーラークラスもあります。

installutil を使用すると、サービス マネージャーに 3 つのサービスがすべて表示されます。ただし、それら(いずれかまたはすべて)を起動すると、最初のもの(「Service1」)のみが実行されます。

これが些細なことであることはわかっており、おそらくこれらのそれぞれに異なるインストーラー プロジェクトを使用することもできますが、私の場合は、意味的に 1 つだけを使用する方が合理的です。

ご協力をよろしくお願いいたします

Venuに感謝します

役に立ちましたか?

解決

各サービスのプロジェクト インストーラーを使用する 3 つのサービス プロジェクト (以下) を作成しました。次に、サービスをサービス マネージャーにインストールするインストーラー プロジェクトを追加しました。私のワークフローは次のとおりです。


  1. Visual Studio 2008 のソリューションに 3 つのサービスを作成します。各サービスに Service1、Service2、Service3 という名前を付けます。(プロパティ ウィンドウで実際のサービス名をそれぞれの名前に必ず変更してください。)
  2. このソリューションにインストーラー プロジェクトを追加しました。
  3. 3 つのサービス プロジェクトからのプロジェクト出力をインストーラー プロジェクトに追加しました。
  4. サービス マネージャーでサービスをインストールするためのインストーラーに 3 つのサービスすべてにカスタム アクションが追加されました。
  5. 構築して設置しました。

これにより、サービス マネージャーに 3 つの異なるサービスが提供されます。サービス1、サービス2、およびサービス3

楽しむ!

http://code.google.com/p/multi-service-install/

編集:

リポジトリ内のコードを更新して、実行可能ファイルが 1 つでサービスが 2 つになるようにしました。各サービスは、独自の名前と開始/停止機能を持ってサービス マネージャーにインストールされます。これがあなたが望んでいることだと思いますよね?私がやったことは次のとおりです。

  1. サービスプロジェクトを作成しました。
  2. 2 番目のサービスを同じプロジェクトに追加しました (一意のサービス名付き)。
  3. 両方のサービス (ServiceA と ServiceB) にインストーラーを追加しました。
  4. ProjectInstaller.Designer.vb ファイルで、両方のサービス インストーラーを表示するように Me.Installers.AddRange 行を変更しました。(Me.ServiceInstaller1、Me.ServiceInstaller2)
  5. メイン サービス (この場合は ServiceA) の Main エントリ ポイントで、ServicesToRun 変数を、実行するすべてのサービス (ServiceA と ServiceB) を含む ServiceBase の配列に設定します。これは、サービス マネージャーがここで引数の数に基づいてプロパティを設定するため、同じ exe の複数のインスタンスを許可するか、単一のインスタンスのみを許可するかという重要な手順です。
  6. インストーラー プロジェクトを追加し、サービスの出力を使用します。
  7. サービスからの出力を使用してカスタム アクションを追加します。

コードは上記と同じリンクから引き続きダウンロードできます。

ありがとう!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top