WindowsサービスでMicrosoftLogParserを使用しています。プログラムは通常のWebページで動作しますが、Windowsサービスにコードを配置すると動作しません。Windowsサービスにブレークポイントを配置しましたが、コードを実行してもプログラムはブレークポイントで停止しません。そのため、トラブルシューティング全体を通して、問題をLogParserソフトウェアとLinqに絞り込みました。したがって、Linqまたはログパーサーソフトウェアのいずれかが問題を引き起こしています。何か考えがありますか?
4 に答える
デバッガーをWindowsサービスに直接接続する必要があります。これはあなたを助けるかもしれません:http://msdn.microsoft.com/en-us/library/7a50syb3%28VS.80%29.aspx。
OnStartメソッドをデバッグしますか?その場合は、System.Diagnostics.Debugger.Launch()
またはSystem.Diagnostics.Debugger.Break()
メソッドを使用して、on startメソッドの実行中にデバッガーをアタッチする機会を得ることができます。そうしないと、デバッガーのアタッチに常に遅れが生じます。
デバッガーをサービスプロセスにアタッチするという太った猫の提案は正しいと思います。それでも機能しない場合は、Debug.WriteLineとDebugViewを使用してみてください。
私はこれまで、プログラムの実行方法に応じて、これをさまざまな方法で行ってきました。最も簡単な方法は、Debugger.Launch()を最適化したプロジェクトをビルドしたときにDebugger.Launch()の周りにif #DEBUGプリプロセッサディレクティブを使用することです。この方法では、Debugger.Launch()呼び出しはアセンブリにコンパイルされません。
このタスクを実行する1つの方法は、System.Windows.Forms.MessageBox.Show( "attach")を使用することです。これにより、[接続]ダイアログが表示されたときにデバッガーに手動で接続できます。
私が好まない最後の方法は、渡されたコマンドラインパラメータに基づいてサービスの動作を変更することです。基本的に、特定のパラメータが起動されるたびにServiceBase.Runを使用してサービスを開始しないことを選択しますが、動作をカプセル化するクラスを呼び出します/サービスの主な機能。