如何使用命令提示符重新启动服务?

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 服务器?

如何开启和关闭FTP功能

如何从命令提示符启动 apache tomcat 服务器的调试模式?

windows service编程

如何使用命令提示符将war文件部署到tomcat?

Apache问题处理