0

我按照官方 msdn 中的说明调试我的 Windows 服务: http: //msdn.microsoft.com/en-us/library/7a50syb3.aspx 但是,在我将进程附加到调试器并尝试停止服务中的服务之后控制管理器,进程刚刚消失,调试器因此退出而没有遇到任何断点。我选择进程名称作为我的窗口服务应用程序的可执行文件。我做错什么了吗?

4

2 回答 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 回答