无法调试Windows服务

时间:2013-06-04 11:48:35

标签: c# windows debugging windows-services

我正在查看几篇帖子,以便找到如何调试Windows服务。 我发现如果我将以下代码放在我的OnStart()函数中:

Debugger.Launch();

可以解决这个问题,但是在我通过CMD(NET START)启动我的Windows服务之后,它只是启动并正常运行,但调试器永远不会启动,即使使用加载的Windows服务打开VS.

我觉得我错过了什么,是什么?

2 个答案:

答案 0 :(得分:0)

您可以尝试在OnStart方法中包含此内容:

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

然后,从Visual Studio菜单手动附加到进程: Debug - >附加到流程

另请注意,在Debugger.Launch Method主题的备注部分中声明:

  

如果已连接调试器,则不会发生任何事情。

答案 1 :(得分: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方法,只需将其公开。