【问题标题】:windows service: failed to debugwindows服务:调试失败
【发布时间】:2013-09-03 01:57:45
【问题描述】:
【问题讨论】:
标签:
c#
debugging
windows-services
【解决方案1】:
当调试器附加到进程时,单击蓝色停止按钮通常会终止进程,这就是您看到服务进程消失的原因。当然,此时不会遇到断点,因为该进程的所有模块都已卸载。如果您想从服务中分离并仍然让它运行,请在 Visual Studio 的 Debug 菜单中单击 Detach All。
感觉好像您在调试服务时遇到了问题。调试 Windows 服务与在 Visual Studio 中调试其他项目略有不同。只需单击绿色的“播放”按钮不会自动将服务置于调试模式。在许多情况下,需要在OnStart() 方法中设置断点,因为这是问题发生的地方。我总是调试 Windows 服务的方式是在程序尝试执行任何其他操作之前,将 Thread.Sleep() 语句放在 OnStart() 方法的顶部。您可以指定希望主线程休眠多长时间,然后利用这段时间将 VS 调试器附加到 Windows 服务。例如:
protected override void OnStart(string[] args)
{
Thread.Sleep(10000);
// Rest of the code
}
将给您 10 秒的时间来附加到服务。安装服务,在Services窗口中启动,然后附加到它。
【解决方案2】:
你可以尝试在你的服务顶部添加这个......
System.Diagnostics.Debugger.Launch();
或者如果可能,将您的服务转换为使用http://topshelf-project.com/。支持在 Visual Studio 中调试。并且还有一个额外的好处是允许服务“作为控制台应用程序运行”以进行调试。