关于调试Windows Service的启动问题,基本可以参考下面的文章的“Configure a service to start with the WinDbg debugger attached”节:

How to debug Windows services
http://support.microsoft.com/kb/824344/en-us

但是有一类Windows Service,必须要用域用户身份运行,如VSTS中的Team Build Service,它们不能使用SYSTEM身份运行,所以就无法与桌面交互(Interactive with Desktop)。这样一来文章中提到的做法就无法达到要求,因为启动的Debugger将不会出现在桌面上。要解决这个问题,可以使用下面的方法,假设我们要在Team Build Service启动后立刻加载Debugger:

1. 用GFlags给TFSBuildService.exe设置下面的DebuggerPath:

D:\Debuggers\cdb.exe -server tcp:port=6789 -cf "c:\script.txt"

其中c:\script.txt是脚本文件,可以用类似下面的一些命令:

sxe -c ".dump /ma /u c:\\clr.dmp;g" clr
g

最后的g命令可保证服务能在超时前被启动起来,这样可以避免设置ServicesPipeTimeout 带来的重启。

2. 当服务被启动以后,运行WinDBG连接到cdb.exe建立的Debugging Server:

windbg -remote tcp:port=6789,server=localhost

3. 结束以后可以用qq命令退出

如果有什么更好的想法的话请告知,谢谢。