0

Windows 8 x64 を実行しているワークステーションで正常に動作する Windows サービスとしてアプリケーションを作成し、OnStart() のアプリケーション イベントログにいくつかのイベントを書き込みます。InstallUtil を使用して Windows 2012 マシンにインストールしましたが、起動直後に停止します。イベントログでそれに関して私が見る唯一のものは、システムの下にあります:

The Foo service entered the stopped state. 
  • 実稼働環境にあるため、やりたくないVS2012をインストールしないと、そのマシンでデバッグすることさえできません。
  • アプリケーションは、ローカルにコピーされた 1 つの DLL に依存します。
  • .NET Framework 2.0 から 4.5 が両方のマシンにインストールされています。
  • 互換性の下で管理者として実行しようとしましたが、とにかく LocalService の下で実行するように設定されているため、実行するタスクをすべて実行する権限が必要です...

編集1:なぜそれが悪いのかについてのコメントを残さずに、なぜ質問に反対票を投じるのですか?

4

1 に答える 1

1

問題のトラブルシューティングに役立つ可能性のある Windows サービスのデバッグについて学んだことはほとんどありません。

  1. Timがコメントで提案したように、Windowsサービス内の各メソッドのすべてをテキストファイルに記録してみてください。
  2. アプリドメインにイベント ハンドラーを追加して、サービスが終了する前に UnhandledException をキャッチしてみてください。テキストファイルに書き込む Log 関数があります。

    AddHandler AppDomain.CurrentDomain.UnhandledException、AddressOf CurrentDomain_UnhandledException

    Public Sub CurrentDomain_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs)
            'Log and output exception message before the application exits.
            Dim exp = DirectCast(e.ExceptionObject, Exception)
            Dim formatexp = String.Format("Exception: {0}; Message: {1}: InnerException: {2}",
                              exp.ToString(),
                              exp.Message.ToString(),
                              exp.InnerException.ToString())
            Log(formatexp)
            Console.WriteLine(formatexp)
    
            Log("Application exited due to unhandled exception")
            Console.WriteLine("Service exited due to unhandled exception")
            'Exit the batch process gracefully.
            Environment.Exit(-1)
    End Sub
    
  3. Windows サービスのクラッシュまたはハングの問題をデバッグするために WindDbg を使用してみてください。Microsoft ダウンロード サイトからダウンロードできます。

  4. サーバー上のリソースにアクセスしようとしているサービス アカウントがそれらにアクセスできるかどうかを確認します。

  5. コードのリアルタイム実行を確認する場合は、実行を SignalR ホストに記録します。これはやり過ぎかもしれませんが、かつて複数のスレッドで異なるプロセスを実行していたことがあり、SignalR を使用して問題をデバッグすることができました。

注: サンプル コードを投稿していただけると、助かります。

于 2013-08-22T14:20:52.057 に答える