- PR -

Windowsサービスでエラーが発生した場合のサービスの停止について

1
投稿者投稿内容
としつまのあんま
会議室デビュー日: 2005/08/30
投稿数: 3
投稿日時: 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
----- サンプルソース(ここまで) -----

以上
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-08-30 12:24
OnStartでCatchされない例外が発生した場合、サービスを起動できずにメッセージボックスが出力されませんか?
私の環境では、エラーメッセージが表示されてサービスの起動に失敗します。
としつまのあんま
会議室デビュー日: 2005/08/30
投稿数: 3
投稿日時: 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
----- サンプルソース(ここまで) -----
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-08-30 13:13
Windowsサービスは自分自身を停止することができないので
net stopコマンドで止めます。と、どこかの外人サイトで見たきがします。

コード:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "net";
startInfo.Arguments = "stop " + this.ServiceName;
Process.Start(startInfo);


としつまのあんま
会議室デビュー日: 2005/08/30
投稿数: 3
投稿日時: 2005-08-30 14:02
burton999さん、どうもありがとうございました。

ご指摘のコードを実行したところ、停止いたしました。

以上
1

スキルアップ/キャリアアップ(JOB@IT)