2011-03-22 11 views
5

¿Cómo verificar el estado de los servicios de Windows desde un programa java?¿Encuentra el estado del servicio de Windows desde la aplicación Java?

+1

posible duplicado de [¿Hay alguna manera, en Java, para comprobar el estado de las ¿un servicio de Windows?] (http://stackoverflow.com/questions/127299/is-there-any-way-in-java-to-check-on-the-status-of-a-windows-service) –

+0

@ Péter Török: Esta podría ser una posible copia de la pregunta, pero ninguna de las respuestas a esa pregunta se refería a la respuesta relativamente simple basada en ProcessBuilder que he proporcionado. –

Respuesta

2

Como mínimo, debe poder iniciar un proceso cmd.exe con el comando sc query service-name y analizar el resultado para determinar el estado. No es bonito, pero al carecer de una API de Java para el administrador de servicios de Windows, esta sería una alternativa viable.

EDITAR - Lee el Javadoc para java.lang.ProcessBuilder, que te permitirá ejecutar un comando externo. Probablemente debería establecer la propiedad redirectErrorStream para que no tenga que manejar dos flujos de entrada (stdout y stderr), lo que hace que el diseño sea mucho más simple.

+0

he buscado esta consulta sc, y funciona bien. ¿Puede decirme por favor cómo puedo ejecutar esta consulta desde Java? –

+0

He editado mi respuesta para incluir un puntero a la API que necesitará para hacer esto. –

9

en el siguiente ejemplo se puede encontrar cómo se puede comprobar windws estado del servicio y se puede analizarse hacer determinada acción

import java.util.*; 
import java.sql.*; 
import java.io.*; 
import java.text.*; 
public class doscmd 
{ 
    public static void main(String args[]) 
     { 
     try 
     { 
      Process p=Runtime.getRuntime().exec("sc query browser"); 

BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream())); 

      String line=reader.readLine(); 
      while(line!=null) 
      { 
       if(line.trim().startsWith("STATE")) 

       { 

       if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("1")) 
    System.out.println("Stopped"); 
else 
    if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("2")) 
     System.out.println("Startting...."); 
    else 
     if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("3")) 
      System.out.println("Stopping...."); 
     else 
      if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("4")) 
       System.out.println("Running"); 

    } 
    line=reader.readLine(); 
    } 

} 

catch(IOException e1) { } 



    } 
} 
+0

great answer waleed .. – bluelurker

+0

El código anterior no devuelve nada. Cuando se depura, dice acceso denegado y nulo. –

Cuestiones relacionadas