【问题标题】:Windows Service started, but process vanished in task managerWindows 服务已启动,但进程在任务管理器中消失了
【发布时间】:2011-03-30 12:48:47
【问题描述】:

我编写了一个 Windows 服务,它在 Windows 2000 机器上运行。有时该服务的可执行文件会死掉,但 Windows 服务在服务管理器中仍列为“已启动”。在这种情况下,为该服务定义的重启行为不会生效。

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

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

【问题讨论】:

    标签: windows windows-services


    【解决方案1】:

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

    避免这种情况的最佳方法是找出导致服务崩溃的原因并修复它。

    【讨论】:

    • 拉里:+1。您是否知道发送SERVICE_CONTROL_INTERROGATE 是否可以让 SCM 指出相关服务进程已终止这一事实?
    【解决方案2】:

    虽然 Larry 作为 Microsoft 员工,可能比任何人都清楚,但我敢说你应该给ChangeServiceConfig2SERVICE_CONFIG_FAILURE_ACTIONS 一个机会。我从事过一项遗留服务,在我进行重构之前,该服务经常崩溃。我的前辈选择的补救措施是使用失败操作来调用一个程序(在 SYSTEM 下运行)然后重新启动服务,就好像什么都没发生一样。

    只有当您的服务在其自己的进程中运行时,所有这些才有效,根据您描述它的方式,我假设了这一点。如果您的服务是在 DLL 中实现的,这将起作用。

    但我完全同意拉里的观点,即您应该调查并解决问题,而不是试图隐瞒。如上所述,我修复了有问题的服务,它没有崩溃或很少崩溃,每个人都对这个解决方案更满意;)

    【讨论】:

    • 我认为这不起作用 - ChangeServiceConfig2 会告诉服务控制器重新启动服务(这是一件非常好的事情)。但它依赖于服务控制器知道服务已经崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2014-01-28
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多