我正在使用批处理文件来停止Windows服务。我正在使用 sc 命令,但我对其他想法开放,考虑到以下问题。问题是批处理文件继续 尽管 服务正在停止( stop 争论 sc 似乎只是 要求 停止 - 不是 等待 停止)。

如何将批处理文件修改为 不继续 直到停止为止 完全的?

有帮助吗?

解决方案

使用可以使用 NET stop, ,这是同步的,即它将等到服务停止。

看 - 净停止

其他提示

sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
  timeout 1
  goto loop
)

如上所述,Net Stop将向服务发送停止命令,但是,如果服务需要超过一定的时间(我的观察到20秒钟左右),则Net Stop将不会等待服务在返回之前实际停止。

要实际暂停批处理文件,直到服务停止,您需要使用像这些线程中概述的方法:

如何检查服务是否正在通过批处理文件运行并启动它,如果它不运行?

停止/启动远程Windows服务,并等待它打开/关闭

我相信 net stop [Service] 应该等到服务完全停止后继续前进。 sc stop [Service] 只需向服务发送“停止”消息。

这有点粗糙,但对我有用,以确保我可以安排每日批处理文件以实质上重新启动服务。

净停止[服务

:再试一次

超时 /t 10 /nobreak

网络启动[服务

如果%errorlevel%neq 0 goto tryagain

我意识到使用此代码段,如果服务不成功启动,这可能会导致无尽的循环。我只是想基本上展示如何使用超时服务时间比Net Stop命令所允许的时间更长的时间来解决问题。

使用 && 命令之间的符号。这 && 符号等待完成上一个命令,然后继续进行下一个命令。

所有命令必须在同一命令行。您可以连续使用所需的多个命令。

您也可以使用 pause 命令。这样,要求按任何键,然后继续执行下一个过程。

例如:

sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo          [ "MyServiceName" service stopped ] && echo. && pause
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top