无法调试Windows服务

本文关键字:服务 Windows 调试 | 更新日期: 2023-09-27 18:16:46

我正在看一些帖子,以找到如何调试Windows服务。我发现,如果我把下面的代码在我的OnStart()函数:

Debugger.Launch();

可以做到这一点,但是当我通过CMD (. NET start)启动我的windows服务后,它只是启动并正常运行,但调试器从未启动,即使VS是用加载的windows服务打开的。

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

无法调试Windows服务

我通过修改service的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方法,只是把它设为公共

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

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

然后,从Visual Studio菜单中手动附加到进程:Debug -> attach to process

另外,请注意在调试器的备注部分。启动方法主题声明为:

如果已经附加了调试器,什么也不会发生。