私はWindowsサービスにかなり慣れていません。c# Windows サービスのインストーラーを作成しましたが、サーバー (Windows Server 2003) へのインストールは正常に行われたようです。起動すると、ログに書き込みService started successfully
ます。停止中は と書き込みますService stopped successfully
。ただし、ログに何も書き込まずにサービスが停止する場合があるため、手動でバックアップを開始します。後でログを見るとService started successfully
、予想通りと書かれています。ログに 2 回続けて表示されるのは、サービスが何らかの理由で実行を停止したエントリが明らかに欠落しているということです。
これの潜在的な原因は何ですか?サービスを自動として設定し、すべてのユーザーに対して実行するようにインストールしました。これは、マシンが起動するたびにサービスが自動的に開始されることを意味するという印象を受けました. 停止した理由を調べるにはどうすればよいですか? クラッシュしたサービスは自動的にイベント ログに書き込みますか? それとも、クラッシュの独自の理由をログに記録するような方法で例外を処理する必要がありますか?
編集:いくつかの追加情報:
- ローカル システム アカウントとしてログオンするように設定しました
- [回復オプション] で、最初の失敗時に再起動するように設定しました。2回目以降の失敗については何もありません。
更新:回答者は、グローバル例外ハンドラーを推奨しました。これを永続的な修正として実装するつもりはありませんが、少なくとも問題が発生している場所を特定するのに役立ちます。インストールしたサービスで実際にこれをテストしたところ、動作しました。未処理の例外が実際にログに何も書き込まずにサービスをクラッシュさせることがわかりました。少なくともアプリケーションエラーが報告されると思っていましたが、そうではありません。
static void Main()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
//other code here
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Utilities.WriteIt(e.ExceptionObject as Exception);
}