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

时间:2015-02-03 12:52:12

标签: batch-file batch-processing

我有一个在服务器上运行并停止服务的批处理脚本。 有时会出现服务无法停止使用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"
  )
)

我试图搜索这个,但看不到明确的答案。

问题是;是否在'NET STOP'完成后才运行kill进程,或者它是否开始尝试停止服务并立即运行IF Statement。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

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

  • 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 =服务已暂停

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