Windows サービスをデバッグする方法を見つけるために、いくつかの投稿を調べていました。OnStart()
関数に次のコードを入れると、次のことがわかりました。
Debugger.Launch();
トリックを行いますが、CMD(NET START)を介してWindowsサービスを開始した後、VSがロードされたWindowsサービスで開かれていても、デバッガーは起動しません。
何かが足りない気がするんだけど、それは何?
Windows サービスをデバッグする方法を見つけるために、いくつかの投稿を調べていました。OnStart()
関数に次のコードを入れると、次のことがわかりました。
Debugger.Launch();
トリックを行いますが、CMD(NET START)を介してWindowsサービスを開始した後、VSがロードされたWindowsサービスで開かれていても、デバッガーは起動しません。
何かが足りない気がするんだけど、それは何?
サービスの Main メソッドを変更することでそれを行っています。これは Program.cs にあり、デフォルトでは次のようになります。
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new ServiceMain() };
ServiceBase.Run(ServicesToRun);
その後、 Environment.UserInteractiveを使用して、サービスがサービスまたはトラフデバッガーのように開始されているかどうかを確認できます。
if (!Environment.UserInteractive)
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new ServiceMain() };
ServiceBase.Run(ServicesToRun);
}
else
{
ServiceMain sm = new ServiceMain();
Console.Write("Service debug run");
sm.StartForDebugging();
}
もちろん、サービスに StartForDebugging メソッドを追加し、OnStart メソッドで行うのと実質的に同じことを行う必要があります。または、OnStart メソッドを直接呼び出して公開することもできます。
OnStart
これをメソッドに含めてみてください。
while(!System.Diagnostics.Debugger.IsAttached)
{
System.Threading.Thread.Sleep(100);
}
次に、Visual Studio メニューから手動でプロセスにアタッチします: Debug -> Attach to Process。
また、 Debugger.Launch メソッドのトピックの備考セクションには、次のように記載されていることに注意してください。
デバッガーが既にアタッチされている場合は、何も起こりません。