2013-06-04 169 views
2

我正在查看幾篇文章,以便找到如何調試Windows服務。 我發現,如果我把下面的代碼在我OnStart()功能:無法調試Windows服務

Debugger.Launch(); 

會做的伎倆,但之後,我開始通過CMD(NET START)我的Windows服務,它只是啓動和正常運行但調試器永遠不會啓動,即使VS使用加載的Windows服務打開。

我覺得我錯過了什麼,它是什麼?

+0

也許你可以整合[Topshelf](http://topshelf-project.com/)來幫助你調試你的Windows服務。 – Oliver

回答

0

我做的,通過對矯正服務的主要方法,它在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直接把它公開。

0

您可以嘗試包括這在OnStart方法:

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

然後,手動從Visual Studio菜單連接到進程:調試 - >附加到進程

而且,請注意,在備註Debugger.Launch Method主題部分指出:

如果一個調試器已經連接,沒有任何反應。

+0

哪個過程?我的服務? – idish

+0

是的,您的服務的過程。 –

+0

我的服務進程呈灰色(我無法點擊它)。 – idish