【问题标题】:windows service: failed to debugwindows服务:调试失败
【发布时间】:2013-09-03 01:57:45
【问题描述】:

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

【问题讨论】:

    标签: 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 中调试。并且还有一个额外的好处是允许服务“作为控制台应用程序运行”以进行调试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 2017-08-08
        • 2011-06-15
        • 2015-11-25
        相关资源
        最近更新 更多