studio programacion móviles libros libro desarrollo curso con aplicaciones java windows-services system-monitoring system-status

programacion - ¿Hay alguna manera, en Java, de verificar el estado de un servicio de Windows?



manual de programacion android pdf (4)

No creo que haya ninguna forma de Java pura para hacer esto porque algunos sistemas operativos no tienen la noción de "servicios" como lo hace Windows. En nuestros proyectos, escribimos un contenedor sobre las llamadas al comando "sc" desde la línea de comandos. Para obtener el estado de un servicio, puede hacer:

sc // alguna consulta de computadora "mi nombre de servicio"

Tendrás que analizar manualmente el resultado, pero es bastante sencillo.

Estoy buscando una biblioteca que me permita buscar el estado de un servicio de Windows para verificar que el servicio se haya iniciado y se esté ejecutando. Miré en la biblioteca de Sigar, pero es GPL y por lo tanto no puedo usarlo. Se requiere una licencia comercial o BSD (ish), ya que se incluirá en el software comercial.


No sé de ninguna biblioteca, pero dependiendo de qué tan detallado necesite obtenerlo, puede obtener algunos comandos de shell y analizar la salida.

NET START servicename

iniciará el servicio o le devolverá un mensaje de error que le indica que ya se inició. Sin embargo, no conozco ningún comando que te otorgue el estado.


Si nada más ayuda, trate de pensar en un enfoque ligeramente diferente (si puede, por supuesto), por ejemplo:

  • Hay un montón de software libre / no gratuito que supervisa, incluida la supervisión del servicio de Windows (por ejemplo, nagios, Zabbix, etc.). Estos monitores suelen tener una API abierta donde su aplicación Java podría integrarse de diferentes maneras.
  • Si tiene el control sobre la aplicación de servicio dependiente, exponga otra forma diferente para que su aplicación Java la verifique (por ejemplo, ejecute un oyente ficticio en un puerto, cree un archivo, etc.). Los servicios de Windows no son una plataforma multiplataforma, por lo tanto, no es algo que espere recibir pronto.

Creo que esta es la mejor manera de verificar el estado del servicio.

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"); //sc query is commond and browser is the name of service 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) { } } }