4

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

任何想法可能导致进程状态和服务状态之间的差异?

4

1 回答 1

6

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

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

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

于 2013-02-11T22:02:08.393 回答