Windows サービスをデバッグするために、公式の msdn の指示に従っていまし た。 Control Manager、プロセスが消えたので、デバッガーはブレークポイントに到達せずに終了します。ウィンドウ サービス アプリケーションの実行可能ファイルとしてプロセス名を選択しました。私は何か悪いことをしましたか?
2 に答える
これをサービスの一番上に追加してみてください....
System.Diagnostics.Debugger.Launch();
または、可能であれば、http://topshelf-project.com/を使用するようにサービスを変換してください。Visual Studio でのデバッグをサポートします。また、デバッグのためにサービスを「コンソールアプリとして実行」できるという追加の利点があります。
デバッガーがプロセスにアタッチされている場合、青い [停止] ボタンをクリックすると、通常はプロセスが終了します。これが、サービス プロセスが消えるのを見た理由です。もちろん、その時点で、そのプロセスのすべてのモジュールがアンロードされるため、ブレークポイントはヒットしません。サービスから切り離して実行したい場合は、Visual Studioの [デバッグ] メニューで [すべて切り離す] をクリックします。
サービスのデバッグに問題があるように感じます。Windows サービスのデバッグは、Visual Studio での他のプロジェクトのデバッグとは少し異なります。緑色の「再生」ボタンをクリックするだけでは、サービスは自動的にデバッグ モードになりません。OnStart()
多くの場合、問題が発生する場所であるため、メソッドにブレークポイントを設定する必要があります。私が常に Windows サービスをデバッグする方法は、プログラムが他のことをしようとする前にThread.Sleep()
、メソッドの先頭にステートメントを配置することです。OnStart()
メイン スレッドをスリープ状態にする時間を指定し、この時間を使用して VS デバッガーを Windows サービスに接続できます。例えば:
protected override void OnStart(string[] args)
{
Thread.Sleep(10000);
// Rest of the code
}
サービスにアタッチするのに 10 秒かかります。サービスをインストールし、Services
ウィンドウで開始して、サービスにアタッチします。