単一の Windows 実行可能ファイルで複数のサービスをホストできますか?
-
18-09-2019 - |
質問
私の質問は基本的に次の質問と同じですが、答えは役に立ちませんでした。
.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 つのサービス プロジェクト (以下) を作成しました。次に、サービスをサービス マネージャーにインストールするインストーラー プロジェクトを追加しました。私のワークフローは次のとおりです。
- Visual Studio 2008 のソリューションに 3 つのサービスを作成します。各サービスに Service1、Service2、Service3 という名前を付けます。(プロパティ ウィンドウで実際のサービス名をそれぞれの名前に必ず変更してください。)
- このソリューションにインストーラー プロジェクトを追加しました。
- 3 つのサービス プロジェクトからのプロジェクト出力をインストーラー プロジェクトに追加しました。
- サービス マネージャーでサービスをインストールするためのインストーラーに 3 つのサービスすべてにカスタム アクションが追加されました。
- 構築して設置しました。
これにより、サービス マネージャーに 3 つの異なるサービスが提供されます。サービス1、サービス2、およびサービス3
楽しむ!
http://code.google.com/p/multi-service-install/
編集:
リポジトリ内のコードを更新して、実行可能ファイルが 1 つでサービスが 2 つになるようにしました。各サービスは、独自の名前と開始/停止機能を持ってサービス マネージャーにインストールされます。これがあなたが望んでいることだと思いますよね?私がやったことは次のとおりです。
- サービスプロジェクトを作成しました。
- 2 番目のサービスを同じプロジェクトに追加しました (一意のサービス名付き)。
- 両方のサービス (ServiceA と ServiceB) にインストーラーを追加しました。
- ProjectInstaller.Designer.vb ファイルで、両方のサービス インストーラーを表示するように Me.Installers.AddRange 行を変更しました。(Me.ServiceInstaller1、Me.ServiceInstaller2)
- メイン サービス (この場合は ServiceA) の Main エントリ ポイントで、ServicesToRun 変数を、実行するすべてのサービス (ServiceA と ServiceB) を含む ServiceBase の配列に設定します。これは、サービス マネージャーがここで引数の数に基づいてプロパティを設定するため、同じ exe の複数のインスタンスを許可するか、単一のインスタンスのみを許可するかという重要な手順です。
- インストーラー プロジェクトを追加し、サービスの出力を使用します。
- サービスからの出力を使用してカスタム アクションを追加します。
コードは上記と同じリンクから引き続きダウンロードできます。
ありがとう!