我有一个Windows服务,我希望看到它启动时正在做什么。通常为了完成这样的事情,我会对Thread.Sleep进行硬编码10秒钟,以便给我足够的时间来附加调试器。这是有效的,但很烦人,因为我需要重新编译一次以暂停,当我(希望记得)暂停时。我知道我可以硬编码中断命令,但这也需要我重新编译我的解决方案。
我知道我也可以将我的服务逻辑分成一个可以在Visual Studio中运行的单独项目,我可以在大多数时间使用它,但有时我想看看我的服务在运行时的确切行为服务。
有没有办法让我的调试器附加到我的服务上,以便我可以看到它在启动时所做的事情,而无需硬编码和重新编译任何东西?
答案 0 :(得分:2)
有一个注册表项,使您有机会在创建过程后立即将调试器附加到该过程。
将以下代码段保存为* .reg文件并导入您的注册表:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\services.exe]
"Debugger"="c:\\Program Files\\Debugging Tool For Windows\\windbg.exe"
记得将'services.exe'更改为实际的服务可执行文件名。
您还可以使用gflag工具来促进工作。有关详细信息,请查看KB 824344: How to debug Windows services
答案 1 :(得分:0)
在Visual Studio的“工具”菜单上查看“附加到进程”。您可以在代码中放置一个断点,然后启动该过程并调试该服务。你可能必须放一个thread.sleep()来给你足够的时间来做出反应。
您必须启动该服务,而不是在Visual Studio中附加到该进程。 thread.sleep()将为您提供执行附加的时间,而不会受到启动代码的影响。
答案 2 :(得分:0)
以下是Microsoft关于如何完成此操作的建议:http://msdn.microsoft.com/en-us/library/7a50syb3%28VS.80%29.aspx