2

コード内のエラーを適切に処理し、サービスを停止する必要があります。

protected override void OnStart(string[] args)
{

    oMyObject = new MyObject(args);
    if (oMyObject.RunStartup())
    {

        oThread = new Thread(new ThreadStart(oMyObject.MainLoop));
        oThread.Start();

    }

    base.OnStart(args);

}

oMyObject.RunStartup() はイベント ログにエラーを書き込み、エラーの場合は false を返します。

ただし、サービスは停止されず、イベント ログには "サービスが正常に開始されました" と表示されます。

イベントログに「サービスが正常に開始されました」と表示されずに、OnStart() でサービスを終了して停止するにはどうすればよいですか?

4

3 に答える 3

2

OnStop()メソッドで停止を検出しようとする代わりに、メソッドを実装しようとしましたOnStart()か?

ServiceControllerその後、インスタンスを作成しStatus、サービスのプロパティを確認できるはずです。

編集:申し訳ありませんが、これは@Lloydの回答の拡張です(コメントを残すことはできません)。


アップデート:

実際に考えてみると、Try Catchブロックを追加するだけOnStart()で例外をキャッチでき (OP に関する @Oded コメントを参照)、サービスを閉じてイベント ログにログを記録することができます。

于 2012-11-20T12:55:26.810 に答える
0

私が思い出すなら、あなたは次Stop()のように電話することができます:

protected override void OnStart(string[] args)
{

    oMyObject = new MyObject(args);

    if (!oMyObject.RunStartup()) {
        Stop();
        return;
    }

    oThread = new Thread(new ThreadStart(oMyObject.MainLoop));
    oThread.Start();

    base.OnStart(args);

}

詳細については、こちらをご覧ください。

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.stop.aspx

于 2012-11-20T12:28:25.317 に答える
0

オデッドが言ったことを実行します。スローして例外をキャッチし、それをキャッチしないことが、現時点でこれを処理するための最良の方法です。

于 2012-11-20T13:30:28.353 に答える