2011-05-09 17 views
5

Me gustaría saber cómo comprobar si un servicio se está ejecutando mediante un archivo por lotesde archivos por lotes para comprobar si un servicio del sistema se está ejecutando

por ejemplo,

si el servicio se está ejecutando xxxx vaya a Inicio stage2.bat otra cosa vaya a hacerse eco de servicio no se está ejecutando

Cualquier ayuda se agradece

Gracias

+0

he encontrado la solución, para cualquier persona sino teniendo este problema: – James

+0

echo off sc consulta PeerDistSvc if% errorlevel% == 1060 echo No se pudo iniciar el servicio. if% errorlevel% == 0 echo El servicio se inició correctamente. echo Nivel de error:% errorlevel% – James

Respuesta

12

similares a How to check if a process is running via a batch script

EDITAR :
Desde la publicación, con una instrucción else añadida:

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N "myapp.exe">NUL 
if "%ERRORLEVEL%"=="0" (
    call stage2.bat 
) else (
    echo Program is not running 
) 

Para un servicio:

sc query "ServiceName" | find "RUNNING" 
if "%ERRORLEVEL%"=="0" (
    call stage2.bat 
) else (
    echo Program is not running 
) 
+0

Hola, lo es, pero no incluye ninguna otra declaración :( – James

+0

@james, verifique mi edición –

+0

Hola, gracias, aunque ¿cómo harías esto con un servicio, aunque se opusiera a un proceso – James

3

leer este artículo http://support.microsoft.com/kb/251192 y ver SC /?

luego tratar

SC QUERY

EDIT: para automatizar el registro de entrada, pi pe el resultado de encontrar y buscar RUNNING

SC QUERY %1 | FIND "STATE" | FIND "RUNNING" >nul 
IF ERRORLEVEL 1 (echo NOT RUNNING) ELSE (echo RUNNING) 
0
@echo off 

color 1F 


@sc query >%COMPUTERNAME%_START.TXT 

ECHO REPORT MISSING INSTALL SERVICES >%COMPUTERNAME%_MISSING.TXT 


find /I "AcPrfMgrSvc" %COMPUTERNAME%_START.TXT >nul 

IF ERRORLEVEL 1 NET START "AcPrfMgrSvc" 

IF ERRORLEVEL 1 ECHO AcPrfMgrSvc >>%COMPUTERNAME%_MISSING.TXT 
0

Mi solución, ya que bajo Windows 7 acaba SI ERRORLEVEL 1 no funciona y el nivel de error es 0 en caso findstr éxito o no.

En mi caso, estoy en busca de algo iniciado por java.exe, digamos hello.jar [parámetro de java.exe]

wmic PROCESS LIST FULL | findstr /I java.exe | findstr /I HELLO.jar 

    if ErrorLevel 1 (
     Echo OK 
     msg "%username%" HELLO.jar not started 
      Pause 
    ) else (
     Echo ERR 
     msg "%username%" HELLO.jar already running 
      Pause 
     exit 
    ) 
Cuestiones relacionadas