2016-07-04 8 views
0

私はC#でWindowsサービスを利用しています。OnStartが失敗した場合に適切なWindowsサービスの状態

OnStartの最後で、私は状態をSERVICE_RUNNINGに設定しました。

OnStartで例外が検出された場合の適切なステータスは何ですか?

また、このようなイベントでサービスを効果的に停止するにはどうすればよいですか?

+1

サービスの状態を変更するにはあなたの仕事ではありません、ServiceBaseクラスは、すでにそれを行います。例外をキャッチしないでください。したがって、エラーは適切に記録され、サービス状態は自動的にStartPendingからStoppedに戻ります。 –

+0

おそらく私は 'set state'に間違っていますが、すべての例外をキャッチしなければならず、それらを処理する必要があります。*そしてあなたの2番目の注釈も正しくありません。* ..例外をキャッチしないか、 -throw、yes - エラーをイベントログに出力し、サービスを終了します。 OnStopを呼び出さないため、終了は「正しい」ものではありません。それはちょうど..悪いアドバイスを通して落ちる。 –

+1

いいえ、正しいです。 'OnStop'は、実際にサービスを停止するとき、つまり起動が失敗したときではなく、' Running'から 'Stopped'に遷移するときにのみ、(最終的にはサービスコントロールマネージャによって)呼び出されることになっています。 –

答えて

0

あなたが停止する状態を設定し、例外をスローすること:

public override void OnStart(string[] args) 
{ 
    . . . 
    if(somethingWrong) 
     throw new Exception("something wrong"); 
} 
+0

私は質問を編集しました。それは明確ではありませんでした。私は例外があり、私はそれが致命的であったために進行したくないということを意味します(DBは利用できません)。何が例外をスローするのでしょうか?正常にシャットダウンするようWindowsに警告しますか?私はこれで読むことができるすべてのリンク? –

関連する問題