停止/启动服务 - 处理 STOP_PENDING 和 START_PENDING

Joã*_*oão 5 windows batch-file

您如何使您的停止/启动服务脚本优雅地处理卡在 STOP_PENDING 或 START_PENDING 中的服务...

与 SC STOP 和 START 相关。通过批处理或 cmd 文件停止和启动服务?

我想到了一种方法,但我不喜欢它。

Joã*_*oão 5

这就是我接近停靠点的方式。

  • 停止:sc %host% 停止 %service% || 回声错误!&& 退出 -1
  • 循环等待状态停止。以最大迭代次数(例如 30)循环。测试服务是否停止(例如 sc %host% query %service% | find /i "STOPPED")。在每次迭代中等待几秒钟(例如 10)。达到最大迭代次数,尝试使用 taskkill 终止进程(例如处理 sc queryex Alerter | find /i "PID" 的输出)。


Ale*_*ruC 5

首先打开service.msc,在目标服务的属性对话框中转到恢复选项卡*(运行 -> services.msc -> 右键单击​​目标服务-> 属性 -> 恢复选项卡*)

确保First\Second\Subsequent失败全部设置为:Take No Action在此输入图像描述

使用以下命令获取目标服务的 PID:sc queryex ServiceName

使用taskkill /f /pid your_PID_number终止进程

  • 如何终止处于 STOP_PENDING 状态且 PID 号为 0 的任务? (2认同)