Cómo crear un servicio de Windows desde la aplicación Java
Acabo de heredar una aplicación Java que debe instalarse como servicio en XP y Vista. Han pasado aproximadamente 8 años desde que usé Windows de cualquier forma y nunca tuve que crear un servicio, y mucho menos desde algo como una aplicación Java (tengo un archivo jar para la aplicación y un archivo jar de dependencia única: log4j). ). ¿Cuál es la magia necesaria para que esto funcione como un servicio? Tengo la fuente, por lo que es posible realizar modificaciones en el código, aunque es preferible evitarlas.
Apache Commons Daemon es una buena alternativa. Tiene Procrun para servicios de Windows y Jsvc para demonios de Unix. Utiliza una licencia de Apache menos restrictiva y Apache Tomcat la utiliza como parte de sí mismo para ejecutarse en Windows y Linux. Hacer que funcione es un poco complicado, pero hay un artículo exhaustivo con ejemplos prácticos.
Además de eso, puede consultar 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 con lo que tuve problemas al 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ían, pero "start()" y "stop()" provocarían errores. Si no puede modificar esas llamadas, considere crear una clase previa que pueda adaptar esas llamadas a sus necesidades.
Tuve algo de suerte con Java Service Wrapper