我正在寻find几个职位,以find如何debuggingWindows服务。 我发现,如果我把下面的代码放在我的OnStart()
函数中:
Debugger.Launch();
会做的伎俩,但通过CMD(NET START)启动我的Windows服务后,它只是启动和运行正常,但debugging器永远不会启动,即使VS打开加载的Windows服务。
我觉得我错过了什么,是什么?
我正在通过修改服务的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菜单中手动附加到进程: 调试 – >附加到进程 。
另外,请注意,在Debugger.Launch方法主题的备注部分中声明:
如果调试器已经连接,则不会发生任何事情。