Если вы можете использовать подключаемые модули:
Используя Simple Service Plugin , вы можете сделать это:
SimpleSC::GetServiceStatus "MyService"
Pop $0 ; returns an errorcode (!=0) otherwise success (0)
Pop $1 ; return the status of the service (see below)
ЕслиУспешно, статус услуги будет иметь одно из следующих числовых значений:
- ОСТАНОВЛЕН
- START_PENDING
- STOP_PENDING
- RUNNING
- CONTINUE_PENDING
- PAUSE_PENDING
- PAUSED
Если вы НЕ можете использовать плагины:
Обратите внимание, что я добавилОт / C до FIND.exe, чтобы вывести количество строк вместо всей строки.Также будьте осторожны, изменяя кавычки.Чтобы сделать это правильно, потребовалось несколько проб и ошибок.
StrCpy $R0 '"$SYSDIR\cmd.exe" /c "sc QUERY MyServiceName | FIND /C "RUNNING""'
nsExec::ExecToStack '$R0'
Pop $R1 # contains return code
Pop $R2 # contains output
${If} $R1 == "0"
# command success
${If} $R2 == "1"
# it's running
${Else}
# it's not running
${EndIf}
${Else}
# command failed
${EndIf}
Обязательно включите библиотеку логики, поскольку NSIS требует этого для макросов условных операторов:
# Included files
!include LogicLib.nsh