質問

一連のWindowsサービスを書いています。 ( OnStart()メソッドで)起動時にエラーがスローされた場合、それらを失敗させます。 OnStart()でエラーをスローするだけでこれができると想定していましたが、代わりに" Starts"を見つけました。 "サービスは開始されましたが、非アクティブですというメッセージが表示されます。これは正しいですか?" (言い換え)。実際にサービスの開始に失敗するようにエラーを処理するにはどうすればよいですか?

役に立ちましたか?

解決

.NET 2.0以降を実行している場合は、 ServiceBase.Stop でOnStartからサービスを停止します。それ以外の場合は、新しいスレッドからStopを呼び出します。

ref [devnewsgroups]( http:/ /www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx

(ニュースグループは削除されました)

他のヒント

サービスウィンドウでエラーが発生したことを報告したい場合(Windows 7の.net 3.5)、ExitCodeを設定する方法が唯一の方法です。 「不明なエラーが発生しました」というメッセージが表示されるため、13816に設定することをお勧めします。 Windowsエラーコードを参照してください。

以下のサンプルは3つのことを達成します。 1-ExitCodeを設定すると、エンドユーザーに役立つメッセージが表示されます。 Windowsアプリケーションログには影響しませんが、システムログにメッセージが含まれます。 2-停止を呼び出すと、「サービスが正常に停止しました」という結果になります。アプリケーションログのメッセージ。 3-例外をスローすると、アプリケーションログに有用なログエントリが作成されます。

protected override void OnStart(string[] args) {

  try {
    // Start your service
  }
  catch (Exception ex) {
    // Log exception
    this.ExitCode = 13816;
    this.Stop();
    throw;
  }

}

すべての起動ロジックを個別のメソッドに移動し、その個別のメソッドから例外をスロー(またはOnStopを呼び出し)します。

OnStartの起動時の奇妙な点がいくつかあります。 OnStart()に1行しか含まれていない場合、「サービスを開始してから停止する」というメッセージが表示されないことがわかりました。メッセージ、スローされた例外はプロセスを終了し、アプリのイベントログに記録します。

別の起動方法でも、このような手法を使用して、アタッチせずにデバッグできます。 http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top