如何在Windows服务被手动停止后5-10秒内自动重启?
让Windows服务在手动停止后自动重启的方案
方法一:利用Windows服务原生恢复配置
这是无需额外工具的最简方案,可实现5-10秒内重启:
- 打开服务控制台:按下
Win + R,输入services.msc回车。 - 找到目标服务,右键选择「属性」。
- 切换到「恢复」标签页:
- 「第一次失败」「第二次失败」「后续失败」的下拉菜单全部选「重新启动服务」。
- 将「重新启动服务的时间」设为5-10秒(直接输入数字,单位为秒)。
- 可选:在「重置失败计数为」中设置时长(比如1天),避免异常情况下无限循环重启。
- 点击「应用」「确定」保存。
关键补充:默认情况下,手动停止服务会被标记为「正常停止」,Windows不会触发恢复。要让手动停止也触发恢复,需修改注册表:
- 按下
Win + R,输入regedit打开注册表编辑器。 - 定位到路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[你的服务名称] - 找到
FailureActions二进制值,右键选择「修改二进制数据」。 - 将第17-20位的字节(默认
00 00 00 00)改为01 00 00 00,这会让Windows把手动停止判定为失败,从而触发恢复策略。 - 修改后重启服务,配置生效。
方法二:用任务计划程序监控服务状态
若上述注册表修改无效,或需要更灵活的控制,可使用任务计划:
- 打开「任务计划程序」,点击「创建任务」。
- 常规标签:给任务命名(如「重启XX服务」),勾选「不管用户是否登录都要运行」,并设置「使用最高权限运行」。
- 触发器标签:点击「新建」,选择「事件」,设置事件日志为「系统」,来源为「Service Control Manager」,事件ID为「7036」(服务停止的事件ID),并在「事件描述」中包含你的服务名称,确定。
- 操作标签:点击「新建」,选择「启动程序」,「程序或脚本」输入
sc,「添加参数」输入start [你的服务名称]。 - 条件标签:取消勾选「只有在计算机使用交流电源时才启动此任务」(服务器场景适用)。
- 设置标签:勾选「如果任务失败,每隔X秒重试一次」,设为5-10秒,重试次数可设为无限或合适数值。
- 保存任务即可。
方法三:代码层面内置重启逻辑
若你有权限修改服务代码,可添加内置监控:
- 在服务的
OnStop方法中,启动一个5-10秒后触发的定时器,定时器触发时调用StartService重启自身。 - 或创建独立的监控进程,每隔5秒检查服务状态,发现停止则启动服务。
注意:需确保监控进程自身稳定,最好也注册为Windows服务。
内容的提问来源于stack exchange,提问作者Elanchezhiyan
相关产品推荐
相关产品推荐

