2

Windows サービスをデバッグする方法を見つけるために、いくつかの投稿を調べていました。OnStart()関数に次のコードを入れると、次のことがわかりました。

Debugger.Launch();

トリックを行いますが、CMD(NET START)を介してWindowsサービスを開始した後、VSがロードされたWindowsサービスで開かれていても、デバッガーは起動しません。

何かが足りない気がするんだけど、それは何?

4

2 に答える 2

0

サービスの 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 メソッドを直接呼び出して公開することもできます。

于 2013-06-04T12:19:39.753 に答える
0

OnStartこれをメソッドに含めてみてください。

while(!System.Diagnostics.Debugger.IsAttached)
{
    System.Threading.Thread.Sleep(100);
}

次に、Visual Studio メニューから手動でプロセスにアタッチします: Debug -> Attach to Process

また、 Debugger.Launch メソッドのトピックの備考セクションには、次のように記載されていることに注意してください。

デバッガーが既にアタッチされている場合は、何も起こりません。

于 2013-06-04T11:52:54.027 に答える