批处理脚本在执行 NET STOP 时会等待吗?

Will batch script wait while it is executing NET STOP?

我有一个批处理脚本,它 运行 在服务器上运行并停止服务。 有时会出现服务无法使用 NET STOP 停止并且需要终止服务的问题。 为了解决这个问题,我添加了一个 IF 语句以在服务未停止时终止该服务。

NET STOP "Service"

FOR /F "tokens=3 delims=: " %%H IN ('sc query "Service" ^| findstr "        STATE"') DO (
  IF /I "%%H" EQU "RUNNING" (
   :: Kill the service if it is still running
   Taskkill /F /FI "SERVICES eq Service"
  )
)

我曾尝试搜索此内容,但找不到明确的答案。

问题是; kill 进程是 运行 仅在 'NET STOP' 完成后,还是它开始尝试停止服务并立即 运行 IF 语句。

如果以后我需要在两者之间添加一个 timeout.exe 行来给 NET STOP 足够的时间来做它的事情。

感谢您的帮助。

NET STOP 是同步的。这意味着脚本将等待它完成。此外,您甚至不需要使用 SC 检查服务。 NET STOP 有以下 return 代码:

  • 0 = 成功
  • 1 = 不支持
  • 2 = 拒绝访问
  • 3 = 相关服务 运行
  • 4 = 无效的服务控制
  • 5 = 服务无法接受控制
  • 6 = 服务未激活
  • 7 = 服务请求超时
  • 8 = 未知故障
  • 9 = 找不到路径
  • 10 = 已经服务 运行
  • 11 = 服务数据库已锁定
  • 12 = 服务依赖已删除
  • 13 = 服务依赖失败
  • 14 = 服务已禁用
  • 15 = 服务登录失败
  • 16 = 服务标记为删除
  • 17 = 服务无线程
  • 18 = 状态循环依赖
  • 19 = 状态重名
  • 20 = 状态无效名称
  • 21 = 状态参数无效
  • 22 = 状态无效服务帐户
  • 23 = 存在状态服务
  • 24 = 服务已暂停

因此您可以检查 return 代码是否为 0(%ERRORLEVEL%==0 - 表示服务已停止),否则将其终止。