私はさまざまなことをするためにいくつかのWindowsサービスを構築しようとしています。1つのexeで複数のWindowsサービス
- は、いくつかのアーカイブされた情報に電子メール
- 定期的にクリーンアップを経て、30分ごとに
- など
私は窓を必要とするタスクを毎日レポートを送信する:例えば、私はするWindowsサービスを必要としますサービスは別物なので、私はそれらをすべて1つのサービスにまとめるというアイデアは本当に好きではありません。
これまでVisual Studio 2008のプロジェクトがありました。Windowsサービスを作成しましたが、OnStartイベントでタイマーを設定しました(テキストファイルには5秒ごとに書き込みます)。テスト目的)。私はプロジェクトにインストーラを追加し、InstallUtil.exeを実行するとすべて正常に動作します。
同じプロジェクトに2つ目のWindowsサービスを追加すると問題が発生します。私はOnStartコードを同じロギング情報で再設定します(少し異なるので、どのサービスがログに書き込んでいるかを知ることができます)。
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
:第二の窓サービスで、私からのProgram.csでメインイベントを変更し、この時点で
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new Service1(),
new Service2()
};
ServiceBase.Run(ServicesToRun);
}
、そこにはコンパイル時のエラーはありませんが、サービス2サービスは行いません何か...ロギングタスクは決して起きません。
2番目のサービスに「インストーラー」が関連付けられていないという事実に絞りました。その後、最初のサービス(つまり、サービス・デザイナーを右クリックし、「インストーラーの追加」をクリック)と同じようにインストーラーを追加しようとしました。今、私がProjectInstaller.csファイルに行くと、そこに別のserviceInstaller(serviceInstaller2)があります。
Windowsの場合:私は、プロジェクトをビルドし、サービスをインストールしよう、と私は、「サービス」コントロールパネルウィンドウに移動し、私はサービス1を起動しようとすると
は今、私は、次のエラーメッセージが表示されますローカルコンピュータ上でService1サービスを開始できませんでした。
エラー1083:このサービスが実行するように構成されている実行可能プログラムは、サービスを実装していません。
私もService2を開始しようとするとエラーメッセージが表示されます(ただし、エラーメッセージがService2を識別する例外はあります)。
1つのexeから2つのサービスを実行するために欠けているものがありますか?
ために見ることができるように、すべて等しいが、その値の前スペースを持っている必要があります「私がしたい」他よりも、特定の理由があります単一の実行可能ファイルにサービスが必要ですか?通常、モジュール性が望ましいでしょうが、そうでなければ必要とするような天才的な状況があるかもしれません。 – bsneeze
唯一の本当の理由は、インストールと展開が簡単なことです。すべての "サービス"は機能の一部からかなり速いものなので、小さなコードにx個のWindowsサービスをインストールする必要はありません。 –
@pyrochild - 私は、1つのアセンブリ内に複数のサービスをマウントする理由は数多くあると確信しています。私が今働いているところでは、顧客ごとにそのデザインの獣を使用しています。それは、それらのサービスとやりとりするソフトウェアを簡単にテストできるようにします。 – Hardryv