C# windows服务:调试失败

C# windows服务:调试失败,c#,debugging,windows-services,C#,Debugging,Windows Services,我按照官方msdn中的说明调试windows服务: 但是,在我将该进程附加到调试器并尝试在服务控制管理器中停止该服务之后,该进程就消失了,因此调试器在没有到达任何断点的情况下退出了。 我选择进程名作为窗口服务应用程序的可执行文件。 我做错了什么吗?当调试器连接到进程时,单击蓝色的停止按钮通常会终止进程,这就是为什么您看到服务进程消失的原因。当然,此时不会命中断点,因为该进程的所有模块都已卸载。如果要从服务分离并仍让其运行,请在Visual Studio中的“调试”菜单中单击“全部分离” 感觉好像

我按照官方msdn中的说明调试windows服务: 但是,在我将该进程附加到调试器并尝试在服务控制管理器中停止该服务之后,该进程就消失了,因此调试器在没有到达任何断点的情况下退出了。 我选择进程名作为窗口服务应用程序的可执行文件。
我做错了什么吗?

当调试器连接到进程时,单击蓝色的停止按钮通常会终止进程,这就是为什么您看到服务进程消失的原因。当然,此时不会命中断点,因为该进程的所有模块都已卸载。如果要从服务分离并仍让其运行,请在Visual Studio中的“调试”菜单中单击“全部分离”

感觉好像您在调试服务时遇到了问题。调试Windows服务与在Visual Studio中调试其他项目略有不同。仅仅单击绿色的“播放”按钮并不会自动将服务置于调试模式。在许多情况下,需要在
OnStart()
方法中设置断点,因为这就是问题发生的地方。我调试Windows服务的方法是在程序尝试执行任何其他操作之前,在
OnStart()
方法的顶部放置
Thread.Sleep()
语句。您可以指定希望主线程休眠多长时间,然后利用这段时间将VS调试器附加到Windows服务。例如:

 protected override void OnStart(string[] args)
 {
     Thread.Sleep(10000);

     // Rest of the code
 }

将给您10秒钟的时间连接到服务。安装该服务,从“服务”窗口的“代码”开始,然后连接到该服务。

能否尝试将其添加到服务的顶部

System.Diagnostics.Debugger.Launch();
或者,如果可能,将您的服务转换为使用。它支持在visual studio中进行调试。还有一个额外的优点,就是允许该服务“作为控制台应用程序运行”进行调试