簡體   English   中英

無法調試Windows服務

[英]Unable to debug Windows Service

我正在調查幾篇文章,以找到如何調試Windows服務。 我發現,如果將以下代碼放入OnStart()函數中:

Debugger.Launch();

可以解決問題,但是當我通過CMD(NET START)啟動Windows服務后,它就可以正常啟動並運行,但是即使通過加載的Windows服務打開了VS,調試器也無法啟動。

我覺得我想念什么,那是什么?

您可以嘗試將其包含在OnStart方法中:

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

然后,從Visual Studio菜單手動附加到流程: 調試->附加到流程

另外,請注意,在Debugger.Launch方法主題的“ 備注”部分中指出:

如果已經連接了調試器,則不會發生任何事情。

我通過修改服務的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方法以使其公開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM