如何从脚本重新启动 Windows 服务?

Jos*_*hua 41 windows-service windows-command-prompt

我有一个批处理脚本,如下所示:

sc stop myservice
sc start myservice
Run Code Online (Sandbox Code Playgroud)

它出错是因为 sc 不会等到服务停止。如何使用脚本重新启动服务?

crb*_*crb 52

发布者希望在尝试重新启动服务之前确保服务已停止。您可以在“sc query”的输出上使用循环,执行如下操作:

:stop
sc stop myservice

rem cause a ~10 second sleep before checking the service state
ping 127.0.0.1 -n 10 -w 1000 > nul

sc query myservice | find /I "STATE" | find "STOPPED"
if errorlevel 1 goto :stop
goto :start

:start
net start | find /i "My Service">nul && goto :start
sc start myservice
Run Code Online (Sandbox Code Playgroud)

  • 很好地使用 ping 作为时间延迟。 (10认同)
  • +1 和 GOTO 徽章。奖励给那些使用 GOTO 语句的人。 (4认同)
  • 在 Windows Server 2008 中,错误级别为 **0**(找到时)和 **1**(未找到时)。所以我不得不颠倒逻辑,然后它就起作用了。 (3认同)

Ska*_*awt 29

可能会遗漏一些东西,但我一直在使用它:

净停止“myservice”
净启动“myservice”

或更短:

净停止“myservice”&&净启动“myservice”


Fac*_*tic 25

使用 powershell 非常简单:

PS >Restart-Service MySrvcHere
Run Code Online (Sandbox Code Playgroud)

更好的是,使用显示名称:

PS >Restart-Service -displayname "My Service Name Here"
Run Code Online (Sandbox Code Playgroud)

Get-Help Restart-Service 更多


Pet*_*uer 6

如果纯粹是为了重启服务,可以使用

Net stop myservice
Net start myservice
Run Code Online (Sandbox Code Playgroud)

但是,如果要访问 sc 的选项,可以使用 start /wait 命令

start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"
Run Code Online (Sandbox Code Playgroud)

这种技术是一种更通用的解决方案,可以应用于任何命令。


Fed*_*TIK 5

安静地重新启动某些要求停止确认的服务(例如,作为服务器服务),您可以将/y添加到停止命令的末尾。

net stop Server /y
net start Server
Run Code Online (Sandbox Code Playgroud)

这将有助于自动执行脚本。