servicio para iniciar hacer ejecutar crear como aplicacion java windows-services

para - Cómo crear un servicio de Windows desde la aplicación java.



crear servicio windows java (19)

Acabo de heredar una aplicación java que necesita ser instalada como un servicio en XP y Vista. Han pasado aproximadamente 8 años desde que utilicé Windows en cualquier forma y nunca tuve que crear un servicio, y mucho menos desde algo como una aplicación java (tengo un jar para la aplicación y un solo jar de dependencia - log4j ). ¿Cuál es la magia necesaria para hacer que esto funcione como un servicio? Tengo la fuente, así que las modificaciones de código, aunque preferiblemente evitadas, son posibles.


Actualmente estoy solicitando esto para ejecutar una aplicación basada en Eclipse, pero primero debo establecer algunas variables que sean locales para esa aplicación. sc.exe solo permitirá ejecutables pero no scripts, por lo que recurrí a autoexnt.exe, que forma parte del kit de recursos de Windows 2003 . Restringe el servicio a un solo archivo por lotes, pero solo necesito que una secuencia de comandos por lotes se convierta en un servicio.

¡ciao!


Con Java 8 podemos manejar este escenario sin herramientas externas. javapackager herramienta javapackager que viene con java 8 ofrece una opción para crear paquetes de aplicaciones independientes:

-nativo tipo Generar paquetes de aplicaciones independientes (si es posible). Utilice la opción -B para proporcionar argumentos a los paquetes que se están utilizando. Si se especifica el tipo, solo se creará un paquete de este tipo. Si no se especifica ningún tipo, se usa todo.

Los siguientes valores son válidos para el tipo:

-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.

En el caso de las ventanas, consulte el siguiente javapackager , podemos crear msi o exe según sea necesario.

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


Creo que el Java Service Wrapper funciona bien. Tenga en cuenta que hay tres formas de integrar su aplicación. Parece que la opción 1 funcionará mejor para usted ya que no desea cambiar el código. El archivo de configuración puede volverse un poco loco, pero recuerde que (para la opción 1) el programa que está iniciando y para el que especificará argumentos, es su programa auxiliar, que luego iniciará su programa. Tienen un archivo de configuración de ejemplo para esto.


Es simple ya que tienes que poner atajo en

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

Windows 10: En Ejecutar shell:startup

en su propiedad -> acceso directo -> destino -> java.exe -jar D:/../runJar.jar

NOTA: Esto se ejecutará solo después de iniciar sesión

Con derecho de administrador

sc create serviceName binpath= "java.exe -jar D:/../runJar.jar" servicio de Windows

si obtiene tiempo de espera, use cmd /c D:/JAVA7~1/jdk1.7.0_51/bin/java.exe -jar d:/jenkins/jenkins.war pero incluso con esto obtendrá tiempo de espera pero en el fondo java.exe se iniciará Compruebe en el administrador de tareas

NOTA: Esto se ejecutará en el inicio de inicio de sesión de Windows (antes del inicio de sesión, basado en el servicio '' Startup Type '')

Explicación detallada de la creación de servicio de Windows.


Exe4j es una muy buena opción aunque no es gratis. Compruébelo en Exe4j En el asistente para crear el archivo .exe, tiene la opción de crear un servicio.



He utilizado JavaService antes con buen éxito. No se ha actualizado en un par de años, pero era bastante sólido cuando lo usé.


No me gustó la licencia para el Java Service Wrapper. Fui con ActiveState Perl para escribir un servicio que hace el trabajo.

Pensé en escribir un servicio en C #, pero mis limitaciones de tiempo eran demasiado ajustadas.


Otra buena opción es FireDaemon . Es utilizado por algunas grandes tiendas como la NASA, IBM, etc; ver su sitio web para una lista completa.


Si usa Gradle Build Tool, puede probar mi windows-service-plugin in de windows-service-plugin , que facilita el uso de Apache Commons Daemon Procrun .

Para crear una aplicación de servicio de Windows Java con el complemento, debe seguir varios pasos simples.

  1. Crear una clase de servicio principal con el método apropiado.

    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. Incluye el plugin en tu archivo build.gradle .

    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"

    El mismo fragmento de script para el nuevo mecanismo de complemento de incubación introducido en Gradle 2.1:

    plugins { id "com.github.alexeylisyutenko.windows-service-plugin" version "1.1.0" }

  3. Configurar el complemento.

    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. Ejecute la tarea createWindowsService gradle para crear una distribución de servicio de Windows.

Eso es todo lo que necesita hacer para crear un servicio simple de Windows. El complemento descargará automáticamente los binarios de Apache Commons Daemon Procrun, extraerá estos binarios al directorio de distribución del servicio y creará archivos por lotes para la instalación / desinstalación del servicio.

En el directorio ${project.buildDir}/windows-service encontrará ejecutables de servicio, scripts de proceso por lotes para la instalación / desinstalación del servicio y todas las bibliotecas de tiempo de ejecución. Para instalar el servicio, ejecute <project-name>-install.bat y, si desea desinstalarlo, ejecute <project-name>-uninstall.bat . Para iniciar y detener el servicio, use <project-name>w.exe ejecutable.

Tenga en cuenta que el inicio del servicio de manejo de métodos debe crear e iniciar un subproceso separado para llevar a cabo el procesamiento y luego regresar. El método principal se llama desde diferentes subprocesos cuando inicia y detiene el servicio.

Para obtener más información, lea sobre el complemento y Apache Commons Daemon Procrun.


Siempre uso sc.exe (consulte http://support.microsoft.com/kb/251192 ). Debe instalarse en XP desde SP1, y si no está en su versión de Vista, puede descargarlo y cargarlo con el kit de recursos de Vista.

No he hecho nada demasiado complicado con Java, pero usar un argumento de línea de comando completamente calificado (x: / java.exe ...) o crear un script con Ant para incluir las dependencias y establecer parámetros funciona bien para mí.


Sin embargo, otra respuesta es Yet Another Java Service Wrapper , esto parece ser una buena alternativa a Java Service Wrapper ya que tiene una mejor licencia. También se pretende que sea fácil pasar de JSW a YAJSW. Ciertamente, para mí, fue muy fácil de usar para los servidores de Windows y para intentar que una aplicación Java se ejecutara como un servicio.

Algunos otros los encontré, pero no terminé usando:

  • Java Service Launcher No utilicé esto porque parecía más complicado trabajar que YAJSW. No creo que esto sea una envoltura.
  • Los servicios de JSmooth Creating Window no son su objetivo principal, pero se pueden hacer . No utilicé esto porque no ha habido actividad desde 2007.



Una opción más es WinRun4J . Este es un iniciador de Java configurable que se duplica como un servidor de servicio de Windows (versiones de 32 y 64 bits). Es de código abierto y no hay restricciones en su uso.

(Revelación completa: trabajo en este proyecto).


Use " winsw ", que se escribió para Glassfish v3, pero funciona bien con los programas Java en general.

Requerir tiempo de ejecución .NET instalado.


Apache Commons Daemon es una buena alternativa. Tiene Procrun para servicios de Windows y Jsvc para demonios Unix. Utiliza una licencia de Apache menos restrictiva, y Apache Tomcat la usa como parte de sí misma para ejecutarse en Windows y Linux. Para que funcione es un poco complicado, pero hay un artículo exhaustivo con un ejemplo práctico.

Además, puede consultar el bin / service.bat en Apache Tomcat para tener una idea de cómo configurar el servicio. En Tomcat cambian el nombre de los binarios de Procrun (prunsrv.exe -> tomcat6.exe, prunmgr.exe -> tomcat6w.exe).

Algo por lo que me costó usar Procrun, sus métodos de inicio y parada deben aceptar los parámetros (String [] argv). Por ejemplo, "start (String [] argv)" y "stop (String [] argv)" funcionarán, pero "start ()" y "stop ()" causarán errores. Si no puede modificar esas llamadas, considere la posibilidad de crear una clase bootstrapper que pueda masajear esas llamadas para satisfacer sus necesidades.


JavaService es LGPL. Es muy fácil y estable. Muy recomendable.


Con Apache Commons Daemon , ahora puede tener un nombre y un icono de ejecutable personalizados. ¡También puede obtener un monitor de bandeja de Windows personalizado con su propio nombre e icono!

Ahora tengo mi servicio funcionando con mi propio nombre e icono (prunsrv.exe), y el monitor de la bandeja del sistema (prunmgr.exe) también tiene mi propio nombre e icono personalizados.

  1. Descargue los archivos binarios de Apache Commons Daemon (necesitará prunsrv.exe y prunmgr.exe).
  2. Cambie el nombre de ellos a MyServiceName.exe y MyServiceNamew.exe respectivamente.
  3. Descargue WinRun4J y use el programa RCEDIT.exe que viene con él para modificar el ejecutable de Apache para incrustar su propio icono personalizado como este:

    > RCEDIT.exe /I MyServiceName.exe customIcon.ico > RCEDIT.exe /I MyServiceNamew.exe customTrayIcon.ico

  4. Ahora instale su servicio de Windows de esta manera (consulte la Procrun para obtener más detalles y opciones):

    > 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. ¡Ahora tienes un servicio de Windows de tu Jar que se ejecutará con tu propio icono y nombre! También puede iniciar el archivo del monitor y se ejecutará en la bandeja del sistema con su propio icono y nombre.