Frage

Ich habe eine ausführbare JAR-Datei. Ist es möglich, einen Windows-Dienst dieser JAR zu schaffen? Eigentlich möchte ich nur, dass beim Start ausgeführt wird, aber ich möchte nicht, dass die JAR-Datei in meinem Startordner platzieren, weder in der Registrierung.

War es hilfreich?

Lösung

Dieser Artikel sollte Ihnen sagen, alles, was Sie wissen müssen: "Ausführen von Java-Anwendungen als Windows-Dienst"; es erwähnt " Java Service Wrapper " (es gibt eine Community Edition namens mit YAJSW )

Andere Tipps

Die einfachste Lösung, die ich für diese bisher gefunden ist der nicht saugenden Service Manager

Verwendung wäre

nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"

Verwenden Sie nssm.exe aber nicht vergessen, die AppDirectory oder alle erforderlichen Bibliotheken oder Ressourcen festlegen nicht zugänglich sein. Voreingestellt NSSM das aktuelle Arbeitsverzeichnis zu dem, dass der Anwendung, java.exe, nicht das Glas. So dies tut eine Batch-Skript zu erstellen:

    pushd <path-to-jar>
    nssm.exe install "<service-name>" "<path-to-java.exe>" "-jar <name-of-jar>"
    nssm.exe set "<service-name>" AppDirectory "<path-to-jar>"

Dies sollte fix der Dienst angehalten Problem.

Ich habe experimentiert mit Apache Commons Daemon . Es unterstützt Windows ( Procrun ) und Unix ( jsvc ). Advanced Installer hat einen Java Service Tutorial mit einem Beispielprojekt herunterladen. Wenn Sie ihre javaservice.jar als Windows-Dienst laufen bekommen können Sie es testen, indem Sie mit „telnet 4444“. Ich habe ihr Beispiel, weil mein Fokus auf immer einen Java-Windows-Dienst laufen war, nicht Java geschrieben werden.

Tanuki geändert Lizenz von jsw vor einiger Zeit, wenn ich ein Projekt beginnen, würde ich noch ein weiteren Java Service Wrapper,

Mit procrun müssen Sie prunsrv auf das Anwendungsverzeichnis kopieren ( herunterladen ), und erstellen Sie eine install.bat wie folgt aus:

set PR_PATH=%CD%
SET PR_SERVICE_NAME=MyService
SET PR_JAR=MyService.jar
SET START_CLASS=org.my.Main
SET START_METHOD=main
SET STOP_CLASS=java.lang.System
SET STOP_METHOD=exit
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%

Ich nehme an

  • laufen diese aus dem gleichen Verzeichnis, in dem das Glas und prunsrv.exe ist
  • das Glas hat seine Arbeit MANIFEST.MF
  • und Sie haben Shutdown Haken in JVM registriert (zum Beispiel mit context.registerShutdownHook () im Frühjahr) ...
  • nicht relative Pfade für Dateien außerhalb des Glases (zum Beispiel log4j sollte mit verwendet werden log4j.appender.X.File = $ {} app.home /logs/my.log oder etwas ähnlich )

Überprüfen Sie die procrun Handbuch und dieses Tutorial für weitere Informationen

Wir verwenden die Tanuki Service Wrapper dafür. Es ist sehr konfigurierbar.

Eine weitere Option ist winsw: https://github.com/kohsuke/winsw/

eine XML-Datei Konfigurieren Sie den Service-Namen angeben, was auszuführen, werden alle Argumente etc. Und die exe verwenden zu installieren. Beispiel xml: https://github.com/kohsuke/winsw/tree/master/examples

Ich ziehe dies NSSM, weil es eine leichte exe ist; und die Config xml ist einfach, den Quellcode zu teilen / commit.

PS ist der Dienst installiert von your-service.exe install läuft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top