2009-03-13 9 views
1

複数のサービスをインストールする単一のサービスインストーラプロジェクトがあります。これは素晴らしいことですが、単一のサービスで単一の処理されない例外があれば、このインストーラによってインストールされたすべてのサービスが停止します。複数のWindowsサービス、1つのインストーラー、依存関係の削除

インストーラ用のコードは、サービスがインストールされると、だから私は、Windowsのサービス管理画面にいくつかの別々のサービスを見ることができますし、それぞれを開始することができ、この

ServiceBase[] ServicesToRun; 

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

ServiceBase.Run(ServicesToRun); 

ようになり、停止、一時停止、独立して再開。

ただし、未処理の例外が発生した場合は、それらはすべて停止します。

問題が発生したサービスのみが停止し、他のサービスはメリットが継続することが理想的です。

サービスごとに本当に別々のインストーラプロジェクトを作成せずに誰でもこれを行う方法を提案できますか?

+0

各サービスは独自のスレッドbtwで実行されます。 – mjallday

答えて

1

最高レベルのサービスごとに独立したエラー処理を追加すると、すべてのサービスが有効になるわけではありません。

エラーが重大でない場合は、自動サービス再起動を追加することもできます。サービスシャットダウンの場合にはたくさんのログを追加し、エラーから再起動するようにしてください。

+0

私はこれをしたいと思いますが、Windowsサービスコントローラーを使用してスクリプトを実行し、サービスがいつ終了するかを報告します。このため、私はエラーが「自然に」起こるようにしたいと思います。ありがとうtho – mjallday

+0

サービスの爆弾の1つ、アセンブリ全体が爆弾になる場合、エラー処理なしで私は少し混乱していると思います。 –

+0

コメントの評価をします。例外がある場合にアセンブリが死んでしまうのを避けることができない場合は、本当に別個のサービスを作成する必要があります。ありがとう – mjallday

関連する問題