2010-03-09 95 views
1

我有一个Windows服务,我想看看它在启动时的功能。通常要完成这样的事情,我会将Thread.Sleep硬编码为10秒,以便给我足够的时间来连接调试器。这是有效的,但是很烦人,因为我需要重新编译一次,以便当我(希望记住)停下来时再次停顿。我知道我可以替代硬编码中断命令,但这也需要我重新编译我的解决方案。我可以预先将调试器附加到服务上吗?

我知道我也可以将我的服务的逻辑分成一个单独的项目,可以在Visual Studio中运行,我可以在大多数情况下使用它,但有时候我希望看到我的服务在运行时的确切功能,一项服务。

有没有一种方法可以让我的调试器连接到我的服务,以便我可以在启动时看到它正在执行的操作,而无需编写任何硬编码和重新编译任何东西?

回答

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

0

查看附加到Visual Studio中工具菜单上的过程。您可以在代码中放置一个断点,然后启动该流程并调试该服务。你可能不得不放置一个thread.sleep()来给你足够的时间做出反应。

您必须启动服务,而不是附加到Visual Studio中的进程。 thread.sleep()会给你时间来执行附加操作,而不会受到启动代码的影响。

相关问题