2011-05-10 25 views
6

He escrito un pequeño servicio de Windows que quiero ejecutar diariamente en mi Windows Server 2008. El servicio está escrito en C#.¿No se pudo iniciar el servicio pero comienza?

  • El código funciona muy bien en un formato de Windows normal.
  • El servicio funciona como debería cuando lo inicio y lo detengo desde la ventana de administración de servicios (services.msc).

Pero cuando se ejecuta en una línea de comandos con:

net start Service1 

me sale el siguiente:

The Service1 service is starting........ The Service1 service could not be started. 

The service did not report an error. 

More help is available by typing NET HELP:SG 3534. 

Lo extraño es, sin embargo, el servicio aún está en marcha, en los Servicios pantalla Todavía lo veo como comenzando hasta que esté completamente iniciado. Cuando intento para detener el servicio después me sale:

The service could not be controlled in its present state. 

More help is available by typing NET HELPMSG 2189 

Y luego se detiene el servicio. ¿Hay alguna manera de resolver esto? Ya he logrado depurar el servicio sin problemas, el código funciona. Pero durante la depuración, todavía sucede lo mismo en la consola de comandos, mientras que aún puedo depurar aún más.

Parece que hay algún tipo de tiempo de espera en el método onStart() .. No tengo ni idea ... Soy bastante nuevo en los Servicios de Windows (este es el primero). Escribo todo mi código en el método onStart(), tal vez esa no sea la mejor idea, pero no sé dónde más escribirlo.

Si alguien pudiera ayudar, lo agradecería mucho.

+1

Quizás devuelva el código de error equivocado en algún lugar – CodesInChaos

+2

Johann Blais me ayudó en el camino correcto. Después de investigar con los términos correctos, encontré esto también: "El problema es que los métodos OnStart y OnStop deben devolver el control al Administrador de control de servicios en 1 minuto, para que el Administrador de control de servicios reconozca que el servicio se está ejecutando o tiene detenido." Mi código tardaba más de un minuto en funcionar. –

Respuesta

4

El evento OnStart se utiliza para iniciar un hilo de fondo que se encargará del procesamiento. Si el método OnStart finaliza sin error, el administrador del servicio supone que el servicio se inició correctamente. Como tal, el OnStart debe regresar lo más pronto posible.

El método OnStop se utiliza para detener el procesamiento en segundo plano. Un OnStop exitoso le dice al administrador del servicio que el servicio se cerró sin error.

+0

Lo cambié a un hilo y eso realmente solucionó el problema. Muchas gracias. Lo único que me pregunto ahora, ¿existe la posibilidad de detener el servicio automáticamente después de que el hilo haya terminado su trabajo? –

+0

¿O incluso necesito detenerlo? Quiero decir, si creo un archivo .bat que inicia y detiene mi servicio, el hilo seguirá ejecutándose, ¿verdad? ¿O no es esta una buena forma de trabajar? –

+0

Algunos servicios de Windows se detienen automáticamente después de que finalizan el procesamiento. Puede decidir hacer lo mismo (llamando al método Stop desde el servicio), pero en cualquier caso, asegúrese de detener el procesamiento de fondo correctamente en el método OnStop. –

Cuestiones relacionadas