- - PR -
Windowsサービスでエラーが発生した場合のサービスの停止について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-08-30 11:38
VB.NET 2003でWindowsサービスを作成しています。
正常時の動作は全く問題ないのですが、OnStartプロシジャで行っている初期処理等で 異常が発生した場合、イベントログに理由を書き込んでサービス自体を停止したい のですがどのように実現すればいいのでしょうか? イベントログへの書き込みは何とかできそうなのですが、サービス自体の停止が うまく実現できません。 作成しているWindowsサービス自体でServiceControllerを作成して停止するという 無謀な(?)方法も試してみましたが、当然NGでした。 どなたかお知恵をお貸し下さい。 ----- サンプルソース(ここから) ----- Protected Overrides Sub OnStart(ByVal args() As String) Try '初期化 ---> エラー時はExceptionがthrowされる Call Initialize() 'タイマースタート Timer.Interval = TIMER_WAIT_MAINLOOP Timer.Start() Catch ex As Exception Throw ex ---> これで停止すると思っていたがNG End Try End Sub ----- サンプルソース(ここまで) ----- 以上 | ||||
|
投稿日時: 2005-08-30 12:24
OnStartでCatchされない例外が発生した場合、サービスを起動できずにメッセージボックスが出力されませんか?
私の環境では、エラーメッセージが表示されてサービスの起動に失敗します。 | ||||
|
投稿日時: 2005-08-30 13:07
burton999さん、早速の回答ありがとうございます。
ご指摘の通り、OnStartプロシジャでエラーが発生した場合はメッセージが表示されてサービスの起動に失敗しました。(サービスがデスクトップとの対話を許可されているかどうかに関係なく) 最初の質問であまり意識がなかったのですが、メイン処理はTimerコントロールを使用して処理を繰り返し行っており、問題なのはタイマーのTimer_Elapsedイベント内でエラーが発生した場合にExceptionをthrowしてもサービスが停止しないということでした。 これはサービスとは基本的には継続して処理するものであり、一旦起動したらエラーが起きても止まらない仕様なのでしょうか? それとも、何か他にいい方法があるのでしょうか? ----- サンプルソース(ここから) ----- Private Sub Timer_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer.Elapsed Try 'メイン処理 ---> エラー発生時はExceptionがthrowされる Call Main Catch ex As Exception Throw ex ---> これで停止すると思っていたがNG End Try End Sub ----- サンプルソース(ここまで) ----- | ||||
|
投稿日時: 2005-08-30 13:13
Windowsサービスは自分自身を停止することができないので
net stopコマンドで止めます。と、どこかの外人サイトで見たきがします。
| ||||
|
投稿日時: 2005-08-30 14:02
burton999さん、どうもありがとうございました。
ご指摘のコードを実行したところ、停止いたしました。 以上 |
1