我按照官方 msdn 中的说明调试我的 Windows 服务: http: //msdn.microsoft.com/en-us/library/7a50syb3.aspx 但是,在我将进程附加到调试器并尝试停止服务中的服务之后控制管理器,进程刚刚消失,调试器因此退出而没有遇到任何断点。我选择进程名称作为我的窗口服务应用程序的可执行文件。我做错什么了吗?
问问题
120 次
2 回答
0
当调试器附加到进程时,单击蓝色停止按钮通常会终止进程,这就是您看到服务进程消失的原因。当然,此时不会遇到断点,因为该进程的所有模块都已卸载。如果要从服务中分离并仍然让它运行,请在 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
窗口中启动,然后附加到它。
于 2013-09-03T02:49:59.043 回答
0
您可以尝试在您的服务顶部添加它....
System.Diagnostics.Debugger.Launch();
或者如果可能,将您的服务转换为使用http://topshelf-project.com/。支持在 Visual Studio 中调试。并且具有允许服务“作为控制台应用程序运行”以进行调试的额外好处。
于 2013-09-03T04:41:22.740 回答