Frage

Ich habe gerade eine Java-Anwendung geerbt, der als Dienst auf XP und Vista installiert werden muss. Es ist etwa 8 Jahre her, dass ich Fenster in irgendeiner Form verwendet habe, und ich habe noch nie einen Dienst zu erstellen, geschweige denn von so etwas wie eine Java-Anwendung (ich ein Glas für die App und eine einzige Abhängigkeit jar habe - log4j ). Was ist die Magie notwendig, diesen Lauf als Dienst zu machen? Ich habe die Quelle bekam, so Codeänderungen, obwohl vorzugsweise vermieden, sind möglich.

War es hilfreich?

Lösung

Ich habe etwas Glück mit der Java Service Wrapper hatte

Andere Tipps

Apache Commons Daemon eine gute Alternative ist. Es hat Procrun für Windows-Dienste und jsvc für Unix-Daemons. Er verbraucht weniger restriktive Apache-Lizenz, und Apache Tomcat verwendet es als Teil von sich auf Windows und Linux laufen zu lassen! Zu erhalten, ist es Arbeit ein bisschen schwierig, aber es gibt ein Apache Tomcat eine Vorstellung zu bekommen, wie der Dienst einrichten. In Tomcat benennen sie die Procrun Binärdateien (prunsrv.exe -> tomcat6.exe, prunmgr.exe -> tomcat6w.exe)

.

Etwas, das ich kämpfte mit der Verwendung von Procrun, Ihre Start- und Stopp-Methoden müssen die Parameter (String [] argv) akzeptieren. Zum Beispiel "Start (String [] argv)" und "Stop (String [] argv)" funktionieren würde, aber "start ()" und "stop ()" würde zu Fehlern führen. Wenn Sie nicht diese Anrufe ändern können, sollten Sie eine Bootstrap-Klasse machen, die diese Anrufe massieren können an Ihre Bedürfnisse anzupassen.

Mit Apache Commons Daemon jetzt einen benutzerdefinierten Namen der ausführbaren Datei haben können und Symbol! Sie können auch einen benutzerdefinierten Windows-Tray-Monitor mit Ihrem eigenen Namen und das Symbol erhalten!

Ich habe jetzt meinen Dienst laufe mit meinem eigenen Namen und das Symbol (prunsrv.exe) und der System-Tray-Monitor (prunmgr.exe) auch meine eigenen benutzerdefinierten Namen und das Symbol hat!

  1. Laden Sie die Apache Commons Daemon Binärdateien (Sie müssen prunsrv .exe und prunmgr.exe).
  2. Umbenennen sie MyServiceName.exe und MyServiceNamew.exe bzw. werden.
  3. Herunterladen WinRun4j und das RCEDIT.exe Programm verwenden, das mit ihm kommt die Apache ausführbare Datei zu ändern, um einbetten Ihre eigenen Symbol wie folgt aus:

    > RCEDIT.exe /I MyServiceName.exe customIcon.ico
    > RCEDIT.exe /I MyServiceNamew.exe customTrayIcon.ico
    
  4. Jetzt installieren Sie Ihre Windows-Dienst wie folgt aus (siehe Dokumentation für weitere Details und Optionen):

    > MyServiceName.exe //IS//MyServiceName \
      --Install="C:\path-to\MyServiceName.exe" \
      --Jvm=auto --Startup=auto --StartMode=jvm \
      --Classpath="C:\path-to\MyJarWithClassWithMainMethod.jar" \
      --StartClass=com.mydomain.MyClassWithMainMethod
    
  5. Jetzt haben Sie einen Windows-Dienst Ihrer Jar, die mit Ihrem eigenen Symbol und Namen laufen! Sie können auch die Monitor-Datei starten, und es wird in der Taskleiste mit Ihrem eigenen Symbol und Namen.

  6. laufen

Eine weitere Option ist WinRun4j . Dies ist ein konfigurierbarer Java-Launcher, der als Windows-Service-Host verdoppelt (beide 32 und 64-Bit-Versionen). Es ist Open Source und es gibt keine Beschränkungen bezüglich der Benutzung.

(vollständige Offenlegung: Ich an diesem Projekt arbeiten).

Ein einfacher Weg ist der NSSM Wrapper Wrapper ( mein Blog-Eintrag ).

Noch eine andere Antwort ist Noch Ein weiterer Java Service Wrapper, scheint dies eine gute Alternative zu Java Service Wrapper wie hat bessere Lizenzierung. Es ist auch zu YAJSW leicht zu sein, sich von JSW bestimmt. Sicherlich für mich, ganz neu zu Windows-Server und versuchen, eine Java-Anwendung als Dienst ausgeführt zu bekommen, es war sehr einfach zu bedienen.

Einige andere, die ich gefunden, aber er am Ende nicht mit:

  • Java Service Launcher ich nicht diese nicht genutzt, weil es komplizierter aussah als YAJSW zum Laufen zu bringen. Ich glaube nicht, dass dies ist ein Wrapper.
  • JSmooth Erstellen Dienste Fenster ist nicht das primäre Ziel, sondern kann erfolgen. Ich habe das nicht verwenden, weil es seit 2007 keine Aktivität gewesen.

Ich denke, den Java Service Wrapper gut funktioniert. Beachten Sie, dass es drei Möglichkeiten Ihre Anwendung zu integrieren. Es klingt wie die Option 1 wird am besten für Sie gegeben arbeiten, dass Sie nicht wollen, um den Code zu ändern. Die Konfigurationsdatei kann ein wenig verrückt, aber nur daran erinnern, dass (für Option 1) das Programm Sie beginnen und für die Sie Argumente werden spezifiziert, ist ihr Hilfsprogramm, das dann das Programm startet. Sie haben eine Beispiel Konfigurationsdatei für diese rel="nofollow.

Java ist LGPL. Es ist sehr leicht und stabil. Sehr zu empfehlen.

Mit Java 8 können wir dieses Szenario ohne externe Werkzeuge behandeln. javapackager Werkzeug mit Java kommenden 8 bietet eine Option zu schaffen, in sich geschlossene Anwendungspakete:

-native Typ Generieren Sie eigenständige Anwendung Bündel (wenn möglich). Verwenden Sie die Option -B Argumente für die Bündler zu schaffen verwendet. Wenn der Typ angegeben wird, dann nur ein Bündel dieser Art geschaffen. Wenn kein Typ angegeben wird, werden alle verwendet wird.

Die folgenden Werte gelten für Typ:

-native type
Generate self-contained application bundles (if possible). Use the -B option to provide arguments to the bundlers being used. If type is specified, then only a bundle of this type is created. If no type is specified, all is used.

The following values are valid for type:

all: Runs all of the installers for the platform on which it is running, and creates a disk image for the application. This value is used if type is not specified.
installer: Runs all of the installers for the platform on which it is running.
image: Creates a disk image for the application. On OS X, the image is the .app file. On Linux, the image is the directory that gets installed.
dmg: Generates a DMG file for OS X.
pkg: Generates a .pkg package for OS X.
mac.appStore: Generates a package for the Mac App Store.
rpm: Generates an RPM package for Linux.
deb: Generates a Debian package for Linux.

Bei Fenstern verweisen die folgenden doc wir können msi oder exe erstellen, wie benötigt wird.

exe: Generates a Windows .exe package.
msi: Generates a Windows Installer package.

Verwenden Sie „ winsw “, die für Glassfish v3 geschrieben wurde, aber funktioniert gut mit Java-Programmen im Allgemeinen.

erfordern .NET-Runtime installiert ist.

Wenn Sie Gradle Werkzeug erstellen können Sie meine versuchen windows-service-Plugin , die unter Verwendung von Apache Commons Daemon Procrun erleichtert.

Um eine Java-Windows-Dienst-Anwendung mit dem Sie durch einige einfache Schritte gehen müssen Plugin zu erstellen.

  1. Erstellen Sie eine Haupt-Service-Klasse mit dem entsprechenden Verfahren.

    public class MyService {
    
        public static void main(String[] args) {
            String command = "start";
            if (args.length > 0) {
                command = args[0];
            }
            if ("start".equals(command)) {
                // process service start function
            } else {
                // process service stop function
            }
        }
    
    }
    
  2. Fügen Sie das Plugin in Ihre build.gradle Datei.

    buildscript {
      repositories {
        maven {
          url "https://plugins.gradle.org/m2/"
        }
      }
      dependencies {
        classpath "gradle.plugin.com.github.alexeylisyutenko:windows-service-plugin:1.1.0"
      }
    }
    
    apply plugin: "com.github.alexeylisyutenko.windows-service-plugin"
    

    Der gleiche Skript-Schnipsel für neuen, Inkubation, Plugin-Mechanismus in Gradle eingeführt 2.1:

    plugins {
      id "com.github.alexeylisyutenko.windows-service-plugin" version "1.1.0"
    }
    
  3. Konfigurieren Sie das Plugin.

    windowsService {
      architecture = 'amd64'
      displayName = 'TestService'
      description = 'Service generated with using gradle plugin'   
      startClass = 'MyService'
      startMethod = 'main'
      startParams = 'start'
      stopClass = 'MyService'
      stopMethod = 'main'
      stopParams = 'stop'
      startup = 'auto'
    }
    
  4. Ausführen createWindowsService gradle Aufgabe eine Windows-Dienst-Verteilung.

  5. zu erstellen

Das ist alles, was Sie tun müssen, um einen einfachen Windows-Dienst zu erstellen. Das Plugin wird automatisch Apache Commons Daemon Procrun Binärdateien herunterladen, entpacken diese Binärdateien in den Dienst Verteilungsverzeichnis und Batch-Dateien für die Installation / Deinstallation des Service erstellen.

In ${project.buildDir}/windows-service Verzeichnis finden Sie Service ausführbare Dateien, Batch-Skripten für die Installation / Deinstallation des Service und alle Laufzeitbibliotheken finden. Um den Dienst zu laufen <project-name>-install.bat zu installieren und wenn Sie den Service laufen <project-name>-uninstall.bat deinstallieren möchten. So starten und den Service nutzen <project-name>w.exe ausführbare zu stoppen.

Hinweis

, dass das Verfahren Handling Service Start schaffen sollte und einen eigenen Thread starten, um die Verarbeitung durchzuführen, und dann zurück. Die wichtigste Methode von verschiedenen Threads aufgerufen wird, wenn Sie den Dienst starten und stoppen.

Für weitere Informationen lesen Sie bitte über das Plugin und Apache Commons Daemon Procrun.

Ich habe verwendet Java vor mit gutem Erfolg. Es hat sich nicht in ein paar Jahren aktualisiert worden, aber es war ziemlich rock solid, als ich es verwendet wird.

Ich habe nicht wie die Lizenzierung für den Java Service Wrapper. Ich ging mit Activestate Perl auf einen Dienst zu schreiben, die die Arbeit der Fall ist.

Ich dachte über einen Dienst in C # zu schreiben, aber meine Zeit Einschränkungen waren zu eng.

Ich verwende sc.exe immer nur (siehe http://support.microsoft.com/kb/ 251192 ). Es sollte auf XP von SP1 installiert werden, und wenn es nicht in Ihrem Geschmack von Vista ist, können Sie es mit dem Vista Resource Kit laden herunterladen.

Ich habe nichts zu kompliziert mit Java gemacht, aber entweder ein vollständig qualifizierte Befehlszeile Argumente (x: \ java.exe ....) oder ein Skript mit Ant Erstellung enthalten Depencies und Parameter funktionieren gut für ich.

Ein recht guter Vergleich verschiedener Lösungen finden Sie unter: http://yajsw.sourceforge.net/#mozTocId284533

Persönlich wie launch4j

es ist einfach, wie Sie in setzen Abkürzung haben

Windows 7 C:\users\All Users\Start Menu\Programs\Startup (Admin) oder User home directory(%userProfile%)

Windows-10: In Run shell:startup

in seiner Eigenschaft -> Verknüpfung -> Ziel -> java.exe -jar D:\..\runJar.jar

Hinweis: das wird nur ausgeführt, nachdem Sie sich einloggen


Mit Admin Recht

sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar" Wird Windows-Dienst erstellen

Wenn Sie erhalten timeout Verwendung cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war aber auch mit diesem Sie Timeout erhalten, aber im Hintergrund java.exe wird gestartet. Überprüfen Sie im Task-Manager

Hinweis: Dies wird bei Windows laufen loggen Start-up (vor Anmeldung, Basierend auf Service 'Startup Type')

Ausführliche Erklärung Fenster zu schaffen Service

Eine weitere gute Möglichkeit ist, FireDaemon . Es wird von einigen großen Geschäften wie NASA, IBM, etc. verwendet werden; sehen ihre Website für eine vollständige Liste.

Ich bin zur Zeit erfordert dies eine Eclipse-basierte Anwendung ausführen, aber ich brauche ein paar Variablen setzen zunächst, dass auf diese Anwendung lokal ist. sc.exe nur ausführbare Dateien erlauben aber keine Skripte, damit ich autoexnt.exe gedreht, welcher Teil der Windows 2003 Resource Kit . Er schränkt den Dienst zu einer einzigen Batch-Datei, aber ich brauche nur eine Batch-Skript in einen Dienst umgewandelt werden.

ciao!

exe4j ist eine sehr gute Wahl, obwohl es nicht frei ist. Check it out unter exe4j im Assistenten die EXE-Datei zu erstellen, Sie sind die Möglichkeit geben, einen Dienst zu erstellen.

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