批处理脚本在执行 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
- 表示服务已停止),否则将其终止。
我有一个批处理脚本,它 运行 在服务器上运行并停止服务。 有时会出现服务无法使用 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
- 表示服务已停止),否则将其终止。