窗口服务停止,但进程继续运行

Mar*_*cin 3 c++ windows service

我正在开发一个Windows服务应用程序,并注意到一个不寻常的问题.首先,我从Windows服务窗口运行该服务,并等待状态转为"已启动".几分钟后,我点击停止,20秒左右服务状态变为空白,表示服务已停止.然而,此服务背后的过程继续运行,并且可以在状态更新后的任务管理器中看到10-30秒.我在Windows 7sp1上运行.我还检查了事件查看器,它没有显示我的服务中的任何错误.(我提到这个的原因是因为我最初怀疑表单的超时错误"等待来自x服务的事务响应时达到超时.")

什么可能导致流程状态和服务状态之间的差异?

mek*_*ian 6

当有一个其他线程继续运行且与您的服务相关的线程没有任何关系(或已经与其解除关联)时,就会发生这种情况.

请注意,进程可能是多租户并托管多个服务,因此stop命令并不总是暗示所有者进程必须退出,只是服务应该停止在该进程中运行.

要进一步调试,当遇到这种状态时,应该附加一个调试器并停止所有线程并检查每个线程上的调用堆栈.对于单个服务进程,您可能会在等待IO或其他操作完成时发现线程已挂起,或者存在空闲线程(例如等待永远不会引发的信号的消息循环线程).