Se o serviço existir

1

Como você verificaria se existe um serviço e, em caso afirmativo, alguma operação?

    
por Burt 16.12.2009 / 17:57

3 respostas

2

O comando sc permite que você consulte um serviço do Windows. Os detalhes completos podem ser encontrados aqui .

Para que você possa consultar um serviço específico, se ele existir, você receberá detalhes como:

sc query lanmanserver resulta em

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

Consultar um serviço que não existe resulta em:

[SC] EnumQueryServicesStatus:OpenService FAILED 1060:

The specified service does not exist as an installed service.

Assim, você pode escrever um script para verificar a resposta e, em seguida, executar qualquer ação que você deseja com base nisso.

Se você não estiver preso ao usar scripts em lote, também poderá escrever algo muito melhor no Powershell, como

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
    }
}
    
por 16.12.2009 / 18:07
1

Depois de um pouco de googling, aqui está um pequeno snippet vb para testar se um serviço existe e executar o método start.

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

Espero que isso ajude.

    
por 16.12.2009 / 18:08
0

Se você precisar de lote puro, você pode usar sc query <service_name> para verificar seu serviço. Se o serviço não existir, será exibido um erro. Você pode verificar o código de erro 1060 com if errorlevel 1060 . Eu uso algo semelhante em um script de instalação para verificar se há outro serviço que seja uma dependência.

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