Как перезапустить сервис с помощью командной строки? - PullRequest
24 голосов
/ 20 октября 2011

Я хочу перезапустить службу Windows, используя командную строку в разделе [Icons], используя Inno Setup. Пожалуйста, помогите мне решить проблему.

Ответы [ 7 ]

32 голосов
/ 20 октября 2011

Вы можете использовать sc start [service] для запуска службы и sc stop [service] для ее остановки. С некоторыми услугами net start [service] делает то же самое.

Но если вы хотите использовать его в том же пакете, имейте в виду, что sc stop не будет ждать остановки службы. В этом случае вы должны использовать net stop [service], а затем net start [service]. Это будет выполнено синхронно.

22 голосов
/ 20 октября 2011

Вы можете создать .bat-файл со следующим содержимым:

net stop "my service name"
net start "my service name"
5 голосов
/ 20 октября 2011
net.exe stop "servicename" && net.exe start "servicename"
4 голосов
/ 17 июля 2014

Для перезапуска работающей службы:

net stop "service name" && net start "service name"

Однако, если вы не знаете, запущена ли служба в первую очередь и хотите перезапустить или запустить ее, используйте это:

net stop "service name" & net start "service name"

Это работает, если служба уже запущена или нет.

Для справки вот документация по условной обработке символов.

2 голосов
/ 24 июля 2014

Это мой код для запуска / остановки службы Windows с помощью команды SC. Если служба не запускается / останавливается, она напечатает информацию журнала. Вы можете попробовать это с помощью 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));
1 голос
/ 20 октября 2011

Вы можете запускать, останавливать и запрашивать службы, используя команду SC .Что касается innosetup, я не уверен.

0 голосов
/ 17 июня 2019

PowerShell имеет командлет Restart-Service, который либо запускает, либо перезапускает службу в зависимости от ситуации.

Командлет Restart-Service отправляет сообщение остановки, а затем сообщение запуска на контроллер служб Windows для указанной службы. Если служба уже была остановлена, она запускается без уведомления об ошибке.

Вы можете указать службы по их именам или отображаемым именам или использовать параметр InputObject для передачи объекта, представляющего каждую службу, которую вы хотите перезапустить.

Это немного более надежно, чем выполнение двух отдельных команд.

Самый простой способ использовать его, просто передать либо имя службы, либо отображаемое имя напрямую:

Restart-Service 'Service Name'

Его можно использовать непосредственно из стандартного приглашения cmd с такой командой:

powershell -command "Restart-Service 'Service Name'"
...