如何使用命令提示符重新启动服务?
Posted
技术标签:
【中文标题】如何使用命令提示符重新启动服务?【英文标题】:How to restart service using command prompt? 【发布时间】:2011-12-11 12:05:55 【问题描述】:我想使用 Inno Setup 的 [Icons]
部分中的命令提示符重新启动 Windows 服务。请帮我解决问题。
【问题讨论】:
你上次问的时候我不是在cmets给an answer to this了吗?使用小型包装器 EXE 提供清单以提供所需的权限并启动/重新启动服务。 这个问题是题外话,因为它询问“如何在命令提示符下重新启动服务”,并且不是特定于 innosetup。 【参考方案1】:PowerShell 具有一个Restart-Service
cmdlet,可以根据需要启动或重新启动服务。
Restart-Service
cmdlet 向指定服务的 Windows 服务控制器发送一条停止消息,然后发送一条启动消息。如果服务已经停止,它会在不通知您错误的情况下启动。您可以通过服务名称或显示名称指定服务,也可以使用
InputObject
参数传递一个对象,该对象代表您要重新启动的每个服务。
这比运行两个单独的命令要简单一些。
最简单的使用方法是直接传递服务名称或显示名称:
Restart-Service 'Service Name'
它可以直接在标准 cmd 提示符下使用如下命令:
powershell -command "Restart-Service 'Service Name'"
【讨论】:
【参考方案2】:这是我的代码,用于使用SC
命令启动/停止 Windows 服务。如果服务无法启动/停止,它将打印日志信息。您可以通过 Inno Setup 进行尝试。
start a service
Exec(ExpandConstant('cmd'), '/C sc start ServiceName', '',
SW_HIDE, ewWaitUntilTerminated, ResultCode);
Log('sc start ServiceName:'+SysErrorMessage(ResultCode));
stop a service
Exec(ExpandConstant('cmd'), '/C sc stop ServiceName', '',
SW_HIDE, ewWaitUntilTerminated, ResultCode);
Log('sc stop ServiceName:'+SysErrorMessage(ResultCode));
【讨论】:
【参考方案3】:您可以使用sc start [service]
启动服务并使用sc stop [service]
停止它。对于某些服务,net start [service]
也在做同样的事情。
但是如果你想在同一批次中使用它,请注意sc stop
不会等待服务停止。在这种情况下,您必须使用net stop [service]
,后跟net start [service]
。这将同步执行。
【讨论】:
使用 sc start + sc stop 对我不起作用(开始部分不起作用)。但是使用 net stop + net start 确实有效! 您是否尝试过在服务名称中使用引号?sc
的问题是它不等待启动/停止完成,它只向服务发送启动/停止请求 - 所以你不能st stop Foo && sc start Foo
,因为它失败了- 它在完成停止之前尝试启动服务。 net
在这里使用正确,因为它等待启动/停止完成。
在运行启动命令之前,我们如何确保服务已经成功停止?当我们再次运行启动命令时,停止过程可能正在进行中。
如果我不想以管理员身份运行它,但知道管理员权限怎么办?有没有办法使用用户名和密码运行命令来重新启动它?【参考方案4】:
重新启动正在运行的服务:
net stop "service name" && net start "service name"
但是,如果您不知道服务是否一开始就在运行,并且想要重新启动或启动它,请使用:
net stop "service name" & net start "service name"
无论服务是否已经运行,这都有效。
作为参考,这里是条件处理符号上的documentation。
【讨论】:
带有||
的第二个版本非常不正确-如果服务正在运行,它将停止,命令成功并且根本不执行第二个命令。试试echo a || echo b
【参考方案5】:
您可以使用SC 命令启动、停止和查询服务。至于 innosetup 我不确定。
【讨论】:
【参考方案6】:net.exe stop "servicename" && net.exe start "servicename"
【讨论】:
有没有单一的cmd重启服务? 您可以编写一个包含 net.exe stop %1 && net.exe start %1 的脚本 有用的命令,但也不必每次都写.exe
。【参考方案7】:
您可以创建一个包含以下内容的 .bat 文件:
net stop "my service name"
net start "my service name"
【讨论】:
以上是关于如何使用命令提示符重新启动服务?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MAC 机器中从命令提示符启动 Appium 服务器?