# Dienst via Java Starten/Stoppen



## flori (26. Aug 2003)

Hallo
Kann mir vielleicht jemand helfen.
Hab einen Java server programmiert, der als dienst unter Windows läuft.
Die Java klasse ist als dienst regestriet, und wir auch beim starten des BS gestartet.
Jetzt will ich aber über ein GUI den server neustarten können.
Meine Frage also: Wie kann ich über eine Java GUI einen Windows Dienst starten und stoppen?
Vielen dank flo


----------



## stev.glasow (27. Aug 2003)

flori hat gesagt.:
			
		

> Die Java klasse ist als dienst regestriet, und wir auch beim starten des BS gestartet.



wie macht man so was ?


----------



## der gute (27. Aug 2003)

hi,
benutze einfach die konsolenbefehle

stoppen
net stop "dienstname"

starten
net start "dienstname"

du brauchst adminrechte dafür


----------



## Haslicher (9. Jun 2005)

Habe das obige versucht mit dem net stop, aber bin mir nicht sicher ob ich den Dienst Namen richtig angegeben habe. Wie kann ich den genau rausfinden, weil der Dienst heißt anders als die exe. Danke


----------



## thE_29 (10. Jun 2005)

du gibst "net start" ein, dann siehst mal wie die ganzen Dienste heißen!

Dann kannst du das rausfiltern wie der service heißt und dann via net stop dienstname beenden

wenn noch mehrere Dienste betroffen sind, dann mit

net stop dienstname /Y dann werden alle anderen Dienste mitbeendet

und via net start dienstname starten!


----------



## Haslicher (10. Jun 2005)

Habe das gemacht und mal mit dem Nachrichtendienst versucht da geht das auch wunderbar nur bei AntiVir Service leider nicht ;-(  liegt das evt an dem leer Zeichen? Kann ich das irgendwie ändern?

Manuell kann ich ihn beenden nur nicht via net stop wobei das doch gehn muss. Danke für die Hilfe


----------



## thE_29 (10. Jun 2005)

Dann musst du

net start "anti vir" sagen !


----------



## CelikBlek (3. Mrz 2006)

Wie kann ich denn Windows sagen, dass mein Java-Programm ein Dienst ist? Sozusagen als Dienst registrieren?


----------



## Illuvatar (3. Mrz 2006)

http://www.pirmasoft.de/runassvc.php
zum Beispiel


----------



## CelikBlek (3. Mrz 2006)

Danke   
Aber geht das nicht über irgendwelchen selbst geschriebenen Skripte oder ähnliches? Ohne ein Fremdprog?


----------



## Cujo (6. Apr 2006)

Ich habe eine Frage zum Thema net start / stop. Es ist nämlich sehr kommisch was die Konsole zurückliefert wenn der Dienst gestoppt ist und man ihn dennoch zu stoppen versucht. Und zwar "null". 

Ich habe hier eine Teil der Methode die einen Dienst stoppen oder starten soll.


```
if (str_OS.indexOf("WINDOWS") > -1) {
                str_CommandLine = "cmd /c net " + method + " \"" + interfaceName +
                    "\"";
            } else {
                // so we have Unix
                // this is not the correct command for linux
                str_CommandLine = "cmd /c net " + method + " \"" + interfaceName +
                    "\"";
            }

            // run the command on the OS
            command = Runtime.getRuntime().exec(str_CommandLine);
            
            BufferedReader br = new BufferedReader(new InputStreamReader(
                        command.getInputStream()));
                        
              }
            String str_LineBuffer;

            while ((str_LineBuffer = br.readLine()) != null) {

                returnValue = returnValue + str_LineBuffer + "\n";
            }

        } catch (IOException e) {
          System.out.println(e.getMessage().toString());
        }
     return returnValue;
```

Ist das Kommando erfolgreich bekomme ich auch ein returnValue, da der BufferedReader etwas parat hat. Kommt es aber zu irgendeinem Fehler ist der BufferedReader leer (null). Der Fehler kommt eben zu stande wenn ich versuche einen gestoppten Dienst zu stoppen oder wenn es aus irgendeinem Grund nicht möglich ist den Dienst zu stoppen oder zu starten. 

Hat mir jemand eine Idee wie ich doch an die Ausgabe der Kommandozeile komme wenn ein Fehler auftritt? Gruss und Danke


<<<Habes jetzt>>>>

Im Falle eines fehlers reicht es nicht den InputStream auszulesen dafür bietet sich die getErrorStream  Methode. 
	
	
	
	





```
BufferedReader br = new BufferedReader(new InputStreamReader(
                        command.getErrorStream()));
```

Gruss. Cujo


----------

