2008-09-24 7 views
5

Ich bin auf der Suche nach einer Bibliothek, mit der ich den Status eines Windows-Dienstes nachsehen kann, um zu überprüfen, ob der Dienst gestartet und ausgeführt wird. Ich habe in die Sigar-Bibliothek geschaut, aber es ist GPL und kann daher nicht verwendet werden. Eine kommerzielle oder BSD (ish) Lizenz ist erforderlich, da diese in kommerzieller Software gebündelt wird.Gibt es eine Möglichkeit, in Java den Status eines Windows-Dienstes zu überprüfen?

Antwort

4

Wenn nichts anderes hilft, versuchen Sie einen etwas anderen Ansatz zu denken (wenn Sie können, natürlich), zB:

  • Es gibt eine viel freie/nicht-freie Software, die Überwachung der Fall ist, einschließlich Windows-Dienstüberwachung (z. B. Nagios, Zabbix usw.). Diese Monitore verfügen normalerweise über eine offene API, in die sich Ihre Java-App auf verschiedene Arten integrieren lässt.
  • Wenn Sie die Kontrolle über die jeweilige Dienstanwendung haben, legen Sie eine andere, andere Möglichkeit für Ihre Java-Anwendung fest (z. B. Ausführen eines Dummy-Listeners an einem Port, Erstellen einer Datei usw.). Windows-Dienste sind keine plattformübergreifende Sache, daher ist nicht zu erwarten, dass sie in absehbarer Zeit unterstützt werden.
0

Ich kenne keine Bibliotheken, aber abhängig davon, wie detailliert Sie erhalten müssen, kommen Sie mit einigen Shell-Befehlen aus und parsen die Ausgabe.

NET START service

entweder den Dienst starten, oder Sie wieder eine Fehlermeldung, die Sie seine sagt bereits begonnen. Ich kenne keinen Befehl, der Ihnen nur den Status geben wird.

3

Ich glaube nicht, dass es irgendeine pure-Java-Möglichkeit gibt, dies zu tun, weil einige Betriebssysteme nicht den Begriff "Dienste" wie Windows haben. In unseren Projekten haben wir einen Wrapper für Aufrufe des Befehls "sc" von der Befehlszeile geschrieben. Um den Status eines Dienstes zu erhalten, können Sie tun:

sc \\ some-Computer Abfrage „mein Dienstnamen“

Sie müssen manuell die Ausgabe analysieren, aber es ist ziemlich einfach.

+0

gute einfache Möglichkeit, dies in Java zu tun –

0

Ich denke, dies ist der beste Weg, um den Status des Dienstes zu überprüfen.

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) { } 



     } 
    } 
Verwandte Themen