[英]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.