2012-05-23 21 views
13

Instalé un archivo jar ejecutable estándar como un servicio de Windows ejecutando el siguiente comando:El servicio de Windows instalado con Procrun funciona en modo // TS, pero no se inicia como un servicio de Windows que dice "inició y luego se detuvo"

> prunsrv.exe //IS//"My Service" --Install="C:\path-to-prunsrv.exe" --Jvm=auto \ 
    --Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \ 
    --StartClass=com.mydomain.MyService 

ahora puedo correr bien mi programa en modo consola ejecutando el siguiente comando (estoy usando Java 1.6):

> prunsrv.exe //TS//"My Service" 

Cuando trato de iniciar el servicio a través de la interfaz de servicios estándar de Windows , Aparece el siguiente mensaje de error:

El servicio MyService en la computadora local se inició y luego se detuvo. Algunos servicios se detienen automáticamente si otros servicios o programas no los utilizan.

No hay salida en el archivo de registro de mi aplicación cuando intento iniciar el servicio de esta manera. Tampoco hay salida en el registro de eventos de la ventana (Windows 7 de 64 bits). ¿Qué puedo hacer para tratar de descubrir por qué este servicio no se ejecutará?

+0

¿Está ejecutando el servicio como un "usuario local" o como un usuario administrador? – checketts

+0

Se establece en la "Cuenta del sistema local" predeterminada utilizada para otros servicios. He intentado otras cuentas en vano. – 11101101b

Respuesta

5

¡No utilice ningún espacio en blanco en el nombre del servicio!

Después de muchas horas de probar y separar Tomcat y duplicar su proceso de arranque, la solución para mi problema terminó siendo que Apache Commons Daemon (Procrun) no funciona correctamente cuando hay espacio en blanco en el nombre del Servicio de Windows.

Parece que instala y registra correctamente un servicio con Windows cuando hay espacios en el nombre del servicio. Las entradas de registro de Windows incluso parecen correctas. El servicio incluso se ejecuta en modo de depuración (también conocido como TS o consola) bien. Sin embargo, cuando se ejecuta como un servicio real lanzado por Windows, falla si el servicio se instaló con un espacio en blanco en el nombre del servicio.

¡Seguro que Procrun tenía algún tipo de salida de registro cuando falla! Un buen registro puede hacer que los problemas de depuración sean tan rápidos.

me necesita tener varias palabras en mi nombre del servicio, por lo que el nombre de mi servicio con una sola palabra y cambió el nombre con el parámetro "DisplayName":

> prunsrv.exe //IS//MyService --Install="C:\path-to-prunsrv.exe" --Jvm=auto \ 
    --Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \ 
    --StartClass=com.mydomain.MyService --DisplayName="My Service" 
2

que quería dar alguna información adicional acerca que '11101101b' dijo arriba. (Esta es mi primera publicación, así que por favor sea amable!)

Pude conseguir que el servicio se instale correctamente con espacios en el nombre del servicio cambiando la parte // IS // MyService en su lugar ser el siguiente, que sospecho es lo que también hizo. (Me disculpo si estoy asumiendo incorrectamente). Observe que la comilla doble de apertura está al principio de la cadena en lugar de al principio del nombre del servicio.

"// ES // Mi servicio"

Como fue el caso de él, el servicio instalado correctamente y parecía correcta, pero no arrancaba. Pude sortear eso cambiando la configuración de datos del valor ImagePath del servicio en el registro para tener el mismo cambio para la parte del comando // RS // My Service.Por lo tanto, el valor de registro en lugar tenía la siguiente en su entorno de datos:

"// // RS Mi servicio"

Todo parece estar funcionando sin problemas.

+0

Gracias por el seguimiento @Suzanne Eso puede ser útil. – 11101101b

1

Este servidor se inicia y se detiene debido a la razón por la cual el servicio completa la tarea, por lo que se detendría automáticamente. si tienes una lógica de correr por dentro, no se detendrá.

Cuestiones relacionadas