参考这个朋友的随笔:http://www.cnblogs.com/dongzhiquan/archive/2010/07/30/1994584.html 第二段:
2.解决此问题的一个方法是:在唯一作用是帮助调试的服务应用程序中创建一个临时服务。 可以将两个服务都安装上,然后启动此“虚拟”服务加载服务进程。临时服务启动了进程后,就可以使用 Visual Studio 中的“调试”菜单来附加到服务进程。当附加该进程之后,可以设置断点并使用这些断点来调试代码。当退出用于附加到该进程的对话框时,实际上已处于调试模式。您可以使用“服务控制管理器”开始、停止、暂停和继续您的服务,因此命中已设置的断点。调试成功后,移除此“虚拟”服务。 (刚开始看的时间一直没看明白,现在初步理解了,就是在一个Solution里面创建再创建一个临时服务项目,将这个项目与要调试的项目一同编译安装到系统服务中(此时有了连个服务A和B),然后先启动临时服务A,并附加到该服务A的进程,此时VS整个Solution进入调试状态了,这就是临时服务的目的了.现在状态下其实VS不仅在监视着服务A进程,而且在此时启动服务B的进程的话VS也会自动地附加上,因此我们可以自由地在任何地方设置断点了,哈哈 ;其实并非一定要是个临时服务项目,只要是个不停执行不会自动结束的项目应该都是可以的,目的就是让VS进入Debug状态,能够自动附加上进程B就可以了 ) |
由于上面这段话只有文字没有图,导致我中间实践的过程中走了一些弯路,我现在把截图放上来,希望能给其他朋友一些补充的参考。
1.Windows 服务项目结构
在这里我们添加了两个服务,也就是上面说的一个主服务,一个临时服务.
2.同样我们在ProjectInstaller.cs文件中也要添加两个serviceInstaller 分别对应两个服务。
基本上就是注意上面两点,其他步骤都和开发Windows Service步骤一样了。
看下效果:
两个服务都装上了。现在启动临时服务,就可以在VS调试->附加到进程窗口中看到DeviceSocket整个项目对应的进程。现在附加上来。
现在在主服务上设置好断点,然后启动服务,便可以调试了。
The End :)