2017-12-28 23 views
0

私はC#Windowsサービスを持っています。私は次のイベントC#Windowsサービス用のOnRestart()イベントリスナーはありますか? Windowsサービスが再起動されたかどうかはどのように確認できますか?

protected override void OnStart(string[] args) 
{  
    string url = "http://localhost:8080"; 
    SignalR = WebApp.Start(url); 
    eventLog1.WriteEntry("Server running on " + url); 
} 

protected override void OnStop() 
{ 
    eventLog1.WriteEntry(LogMessage.Message); 
    SignalR.Dispose(); 
} 

を持っている問題は、私のサービスコードは、その操作の実行が完了したとき、私は

Environment.Exit(1);

をやって、私はプロパティは、それが再起動されるように私のサービスに設定されていることです1分後(障害を受信したとき)。それが失敗した場合、実際には「停止」イベントに当たってログが書き込まれないことがあります。

OnRestart()

イベントまたはそのような何かはありますか?私はサービスを終了する前にログを書き出す方法を見つけようとしています。 Windowsのサービスダイアログから「サービス停止」を手動でクリックすると、通常ログが書き込まれます。しかし、サービスを終了するために手動で停止をクリックする必要はなくなりました。サービスを自動的に再起動してエラーを強制して、手動で停止して再起動する必要はありません。

あなたは、私はちょうど私がコードを出る前に

eventLog1.WriteEntry("blah blah"); 

を行うことができると思うだろうが、私はそれがスコープ外だとので、私は別々のクラスのコードを終了していないことができます:(

+1

Environment.Exitを使用する()は、根本的に間違っています。それはあなたがいつ終了する必要があるかを決めるサービスマネージャーです。タイマーを使用して1分ごとの操作を実装します。 –

+0

私はもうWindowsサービスを書いていません。私はコンソールアプリケーションを作成しており、["TopShelf"](http://docs.topshelf-project.com/ja/latest/configuration/quickstart.html)でそれらをWindowsサービスとして実行しています。開始時、停止時、例外時、およびその他のいくつかの点でも指定できます。基本サービスは10行のコードしか必要としません。 –

+0

@HansPassantあなたの意見は間違っています**あなたの意見は**事実ではありません。 – Yusha

答えて

0

それが何らかの理由で失敗した場合は?仕事をしているコードの部分の周りにtry/catchブロックをラップすることはできませんが、それはあなたがOnStop()イベントを発生させることができるcatchブロックにジャンプします。

try 
    {    
     //Your service code 
    } 

    catch (Exception e) 
    { 
     OnStop(); 
    } 
+0

これはうまくいくようです。私はそれを試してみましょう。 – Yusha

関連する問題