Windows服务已启动,但进程在任务管理器中消失

问题描述:

我对Windows服务进行了编程,并且它正在Windows 2000计算机上运行。有时该服务的可执行文件会死亡,但Windows服务在服务管理器中仍被列为“已启动”。在这种情况下,为此服务定义的重新启动行为不生效。Windows服务已启动,但进程在任务管理器中消失

当然,该过程需要调试,但我现在正在寻找解决方法。

我该如何避免这种情况? Windows 2000中的服务管理器如何确定Windows 2000进程是否仍然启动?

这可能意味着服务崩溃。 IIRC,当服务进程异常终止时,旧版本的Windows并不总能恢复。但那是很多年前的事情,我的记忆可能是错误的。

避免这种情况的最好方法是弄清楚是什么导致你的服务崩溃并修复它。

+0

Larry:+1。您是否碰巧知道发送'SERVICE_CONTROL_INTERROGATE'是否会将SCM指向问题服务进程已经死亡的事实? – 0xC0000022L 2011-03-29 18:50:57

+0

我不知道,这当然值得一试... – 2011-03-30 04:46:24

虽然Larry作为微软的员工,可能比其他人更了解我,但我敢说你应该给ChangeServiceConfig2一个SERVICE_CONFIG_FAILURE_ACTIONS一枪。我曾在一个遗留服务上工作,在我进行重构之前,它曾经经常崩溃。我的前任选择的补救措施是使用失败操作来调用(在SYSTEM下运行)的程序,然后重新启动服务,就好像什么都没有发生过一样。

所有这些只有在您的服务在自己的进程中运行时才有效,我认为这是您描述它的方式。如果你的服务是在一个DLL中实现的,那么不会是的工作。

但我完全同意拉里你应该调查和解决问题,而不是试图隐瞒它。如上所述,我修复了有问题的服务,并且没有崩溃或很少崩溃,并且每个人都对该解决方案感到高兴;)

+0

我不认为这有效 - ChangeServiceConfig2会告诉服务控制器重新启动服务(这是一件很好的事情)。但它依赖于服务控制器知道该服务已经崩溃。 – 2011-03-30 04:48:12

+0

@Larry Osterman:我明白了。 – 0xC0000022L 2011-03-30 18:06:52