Назад | Перейти на главную страницу

Если услуга существует Состояние

Как бы вы проверить, существует ли услуга, и если да, то выполните какую-нибудь операцию?

В sc Команда позволяет запрашивать службу Windows, полную информацию об этом можно найти Вот.

Таким образом, вы можете запросить конкретную услугу, если она существует, вы получите следующую информацию:

sc query lanmanserver приводит к

SERVICE_NAME: lanmanserver
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE,PAUSABLE,ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

Запрос несуществующей службы приводит к:

[SC] EnumQueryServicesStatus:OpenService FAILED 1060:

The specified service does not exist as an installed service.

Таким образом, вы можете написать сценарий для проверки ответа, а затем выполнить любое действие, которое вы хотите на основе этого.

Если вы не зацикливаетесь на использовании пакетных сценариев, вы также можете написать что-нибудь более приятное на Powershell, например

function serviceCheck ($service, $machine) {

$result = [System.ServiceProcess.ServiceController]::GetServices($machine) | where{     (($_.name -eq $service) -or ($_.displayname -eq $service))
}

    if (result -eq $null)
    {
        Do something if service does not exist
    }
    else
    {
        Do something if service does exist
    }
}

После небольшого поиска в Google, вот небольшой фрагмент vb для проверки существования службы и выполнения метода запуска.

Dim colServices As Object
Dim objService As Object
Set colServices = GetObject("winmgmts:").ExecQuery _
    ("Select Name from Win32_Service where Name = '" & PutServiceNameHere& "'")
For Each objService In colServices
    If Len(objService.Name) Then
        objService.StartService()
    End If
Next
Set colServices = Nothing

Надеюсь это поможет.

Если вам нужна чистая партия, вы можете использовать sc query <service_name> чтобы проверить вашу службу. Если служба не существует, возникает ошибка. Вы можете проверить код ошибки 1060 с участием if errorlevel 1060. Я использую нечто подобное в сценарии установки, чтобы проверить наличие другой службы, являющейся зависимостью.

REM throw output away with > nul
sc query MyServer > nul
IF ERRORLEVEL 1060 (
    echo "Service is not installed"
) else (
    rem do something else
)