我想使用 Inno Setup 在
[Icons]
部分使用命令提示符重新启动 Windows 服务。请帮我解决问题。
您可以使用
sc start [service]
启动服务并使用 sc stop [service]
停止服务。对于某些服务 net start [service]
也在做同样的事情。
但如果你想在同一批中使用它,请注意
sc stop
不会等待服务停止。在这种情况下,您必须使用 net stop [service]
,然后使用 net start [service]
。这将同步执行。
您可以创建一个包含以下内容的 .bat 文件:
net stop "my service name"
net start "my service name"
net.exe stop "servicename" && net.exe start "servicename"
要重新启动正在运行的服务:
net stop "service name" && net start "service name"
但是,如果您一开始不知道该服务是否正在运行并想要重新启动或启动它,请使用以下命令:
net stop "service name" & net start "service name"
无论服务是否已在运行,这都有效。
作为参考,这里是关于条件处理符号的文档。
这是我的代码,使用
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));
您可以使用SC命令启动、停止和查询服务。至于 innosetup 我不确定。
Restart-Service
cmdlet,可根据需要启动或重新启动服务。
cmdlet 向指定服务的 Windows 服务控制器发送一条停止消息,然后发送一条启动消息。如果服务已停止,则会启动该服务而不通知您错误。Restart-Service
您可以通过服务名称或显示名称来指定服务,也可以使用
参数传递一个代表您要重新启动的每个服务的对象。InputObject
这比运行两个单独的命令更简单。
最简单的使用方法只需直接传递服务名称或显示名称:
Restart-Service "$ServiceName"
可以直接从标准 cmd 提示符使用如下命令:
powershell -Command "Restart-Service '%ServiceName%'"