设置服务失败时执行的恢复操作

设置服务失败时执行的恢复操作

我在 Windows 机器上安装了许多我们自定义编写的服务(无论是 XP、Server 还是 Vista)。我总是在第一次、第二次和后续失败时配置“重新启动服务”。但我从未见过这种方法奏效;服务只是停止(由于代码中的错误或某些原因),但没有重新启动。

我刚刚注意到“启用因错误而停止的操作”复选框。如果故障是由错误引起的,是否必须选中该复选框才能使恢复生效?

谢谢,马克。

答案1

如果您的服务由于错误而停止,该错误由 Windows 记录,那么是的,您需要勾选“启用因错误停止的操作”,否则它将不起作用。

如果您没有勾选此项,那么它将仅重新启动因合法或未知原因而停止的服务。

您也可以使用命令行执行此操作:

 sc.exe failureflag [MyService] 1

答案2

Windows Vista 和 Windows Server 2008 引入了“启用发生错误的停止操作”复选框,它提供了一行令人尴尬的文档

选择启用发生错误的停止操作以触​​发服务因错误停止的恢复操作。

执行程序程序也进行了更新,提供了一个新命令:failureflag文档显示了一个不好的例子,并不适用于 Windows Server 2003,但告诉我们该命令:

指定当服务因错误而停止时是否触发恢复操作。

因此,复选框和sc failureflag用于设置相同的标志。
让我们sc failureflag在命令提示符中输入,我们最终得到了一个相当不错的描述:

更改服务的失败操作标志设置。如果此设置为 0(默认值),则服务控制管理器 (SCM) 仅在服务进程终止且服务处于 SERVICE_STOPPED 以外的状态时才启用对服务的配置的失败操作。如果此设置为 1,则除了上述服务进程终止之外,如果服务进入 SERVICE_STOPPED 状态且 Win32 退出代码不为 0,则 SCM 启用对服务的配置的失败操作。如果服务未配置任何失败操作,则忽略此设置。

可以找到类似的描述这里
因此,原始问题的正确答案是:当您的服务未在 SERVICE_STOPPED 状态下终止时,配置的恢复操作始终生效。如果您需要在服务进入 SERVICE_STOPPED 状态时也启用恢复操作,则必须选中“启用因错误而停止的操作”,前提是退出代码为非 0(错误)。

相关内容