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


10

我已经在窗口框上安装了许多自定义的书面服务(与XP,Server,Vista无关)。我总是配置为在第1次,第2次及以后的故障上“重新启动服务”。但是我从未见过这项工作。该服务只是停止(由于错误或代码中的某些错误),但不会重新启动。

我刚刚注意到“对有错误的站点启用操作”复选框。如果失败是由错误引起的,是否必须检查才能使恢复生效?

谢谢马克。

Answers:


3

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

如果没有选中此复选框,则它将仅重新启动由于正当或未知原因而停止的服务。


1
谢谢-我有点明白。但是我会认为“错误”与“失败”是同一回事,因此该服务应该在未选中此框的情况下启动。
M Schenkel

我同意这似乎有些奇怪,因为大多数服务失败的原因您都会认为这是一个错误。
Sam Cogan

2
对于因“正当”原因而停止的服务,永远不会触发恢复操作。这个答案仍然使“停止”和“失败”这两个术语感到困惑。
matpop

3
微软公司的任何人使用这种语言都应该因为他们的无能而陷入混乱。
Brain2000

16

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

选择“ 为有错误的停止启用操作”,以触​​发服务因错误而停止的恢复操作。

SC.exe的程序也被更新,以提供一个新的命令:failureflag。该文档显示了一个错误的示例,并不真正适用于Windows Server 2003,但是告诉我们该命令:

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

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

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

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


2
恭喜您!
Tim Lovell-Smith
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.