# Java Programm als Dienst starten...



## martin0815 (7. Jun 2010)

Hi!

Ich versuche mit dem Resourcekit ein Javaprogramm als Dienst zu starten.

Ich habe dazu svrany und sc.exe des ResKits verwendet um meine Testklasse als Dienst zu starten. Der Dienst wird auch korrekt eingerichtet. Die Pfade usw. scheinen korrekt zu sein. Wenn ich den Dienst starte kommt nur die Meldung das er gestartet und sofort wieder beendet wurde.

Da ich mir nicht sicher war ob ich alles richtig gemacht habe, habe ich danach eine Anleitung im Internet gesucht. Ich bin dann wie hier beschrieben vorgegangen (dort gibts ein Testbeispiel, welches direkt laufen sollte): Tom Henne: JavaProgrammeAlsWindowsServiceStarten

Beim Ausführen des Beispiels hier ist aber exakt der gleiche Fehler aufgetreten. Jetzt weiss ich nicht mehr woran es liegen kann. Kann mir jemand helfen oder mal ein Minibeispiels schicken wie er es bei WinXP hinbekommen hat?


----------



## mg_666 (7. Jun 2010)

Servus,

mit Deinem Tool habe ich zwar noch nichts gemacht aber ich hatte ein ähnliches Problem, dass der gewünschte Dienst immer sofort beendet worden ist. Mein Fehler lag an dem sc-Kommando...und zwar an den fehlenden Leerzeichen beim binPath und bei den anderen möglichen Parametern.

Beispiel:
sc create ServiceTest binPath= "C:\TestService\ServiceTest.exe" start= auto

Vielleichts hilfts Dir ja.

Gruß
Matthias


----------



## KrokoDiehl (7. Jun 2010)

Vorweg: Ich habe derartiges noch nie versucht oder gemacht, aber vielleicht helfen folgende Hinweise:

a) Wenn ich Probleme beim Starten von Java-Programmen hatte, dann war es in 80% der Fälle wg des Classpaths. Also prüf mal, ob dieser stimmt (der Registry-Wert) und ob er dort auch alles hat. Deine Anwendung braucht nicht nur fremde Jars (je nachdem, was sie eben braucht...), sondern auch den Std-Java-Code.
Oder, falls du das Jar direkt startest, ob der Classpath im Manifest steht.

b) Verwendet dein Programm externe Bibliotheken (DLLs)? Findet er sie ggfs nicht?

c) Dienste unter Windows (zumindest bis XP) haben immer das Arbeitsverzeichnis C:\Windows\system32 (bzw. wo du sonst Windows installiert hast). Vielleicht arbeitest du mit relativen Pfaden (Classpath?) und er findet es deshalb nicht.
Zum Testen: Gehe in das /system32-Verzeichnis und führe dort mal den Start-Befehl aus, den du in die Registry geschrieben hast. Das müsste (fast) das sein, was der Windows-Dienst beim Starten macht.

d) Dienste laufen oft als anderer Benutzer und haben daher u.U. andere Rechte und Umgebungsvariablen. Ist JAVA_HOME veilleicht nicht für das ganze System, sondern nur für den Benutzer gesetzt? In den Dienst-Einstellungen kannst du deinen Dienst auch unter einem anderen Benutzer als "lokales System" laufen lassen. Ist vllt. ein Versuch wert.


----------



## Steven Hachel (9. Jun 2010)

Hallo,

ich kann dir das Program Exe4j nahe legen! Damit kannst du ganz normal unter Java entwicklen und daraus einen Dienst erstellen.
Diesen Dienst installierst du dann, so wie man halt nen Dienst installiert und das wird 100%´ig funktionieren.

viele Grüße
Steven

hier der Link dazu:
ej-technologies - Java Profiler, Java Installer Builder, Java Tools


----------



## martin0815 (9. Jun 2010)

Ich habe die Ursache des Problems gefunden. Allerdings weiß ich nicht warum es auftritt nur kann ich es nun einfach umgehen.

In der Registry wurde unterhalb des Dienstes der Schlüssel Parameters erzeugt, darunter dann

Application mit dem eigentlichen Javaaufruf
AppParameters mit den Optionen wie beispielsweise Klassenpfad
AppDirectory mit dem Arbeitsverzeichnis

Aus irgendeinem Grund schien der Servicewrapper aber die AppParameters nicht zu beachten. Nachdem ich also die Parameter einfach bei Application eingetragen habe funktionierte der Start des Dienstes. Inzwischen verzichte ich einfach auf den Schlüssel AppParameters.

Wenn jemand weiß warum das so auftritt würde mich es noch interessieren (per PM), aber da mein Service nun funtzt schliesse ich das Thema...


----------

