我正在查看幾篇文章,以便找到如何調試Windows服務。 我發現,如果我把下面的代碼在我OnStart()
功能:無法調試Windows服務
Debugger.Launch();
會做的伎倆,但之後,我開始通過CMD(NET START)我的Windows服務,它只是啓動和正常運行但調試器永遠不會啓動,即使VS使用加載的Windows服務打開。
我覺得我錯過了什麼,它是什麼?
我正在查看幾篇文章,以便找到如何調試Windows服務。 我發現,如果我把下面的代碼在我OnStart()
功能:無法調試Windows服務
Debugger.Launch();
會做的伎倆,但之後,我開始通過CMD(NET START)我的Windows服務,它只是啓動和正常運行但調試器永遠不會啓動,即使VS使用加載的Windows服務打開。
我覺得我錯過了什麼,它是什麼?
我做的,通過對矯正服務的主要方法,它在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菜單連接到進程:調試 - >附加到進程。
而且,請注意,在備註Debugger.Launch Method主題部分指出:
如果一個調試器已經連接,沒有任何反應。
也許你可以整合[Topshelf](http://topshelf-project.com/)來幫助你調試你的Windows服務。 – Oliver