2009-07-21 14 views
7

he desplegado mi servicio de Windows (usando la clase de forma independiente instalador y SC.EXE), pero me da un error cuando trato de iniciarlo:¿Cuál es el tiempo de espera para iniciar un servicio de Windows?

--------------------------- 
Services 
--------------------------- 
Could not start the MyName service on Local Computer. 



Error 1053: The service did not respond to the start or control request in a timely fashion. 

¿Cuál es el tiempo de espera? Se sintió como alrededor de 3 segundos. ¿Qué debo hacer si mi servicio demora más?

Respuesta

14

En su clase de servicio, utilice ServiceBase.RequestAdditionalTime() en su método OnStart/OnStop:

// request an additional 4 seconds to complete the operation 
RequestAdditionalTime(4000); 
+1

Esto es súper útil. Gracias. – Jirapong

11

La forma normal de crear un servicio es hacer que el código de inicio cree un nuevo hilo y ejecutar su servicio en ese hilo.

El inicio del servicio debe ser casi instantáneo, nada más que generar un nuevo hilo con su trabajo "real".

Si está tardando más de tres segundos, eso es una señal de que está haciendo el trabajo real en su hilo principal, y no crea uno separado para su servicio.

+2

Esto supone un mal diseño en el que podría no estar presente. La inicialización compleja puede llevar más tiempo y el mensaje "no se pudo responder" alerta a los usuarios sobre un inicio fallido. Si la falla se produce en un hilo y el servicio se detiene como resultado, la única evidencia visible (sin una UI de monitoreo separada) estará en el registro de eventos. –

+0

¿por qué? ! – zvolkov

+3

Existe una razón por la cual hay un límite de tiempo de 3 segundos para el inicio. Hay formas de ampliar esto (RequestAdditionalTime()), pero la recomendación es que los servicios se inicien rápidamente y/o que inserten el trabajo en un subproceso separado y que se activen de otra manera. Tomar un largo tiempo para el inicio evitará que otros servicios comiencen rápidamente, lo cual ES un mal diseño, IMO. –

2

En lo que respecta a la cuestión específica, el tiempo de espera exacto varía, pero es menos de 30 segundos. Puede controlar el tiempo de espera de inicio predeterminado para un servicio a través de una clave de registro; puede ver cómo hacerlo here.

Sin embargo, estaré de acuerdo con muchos otros en que consideraría dos opciones posibles.

  1. Haga que su servicio se inició antes posible, generará un subproceso, etc ..
  2. Si no puede ir con la opción uno, puede utilizar RequestAdditionalTime(). Solo asegúrate de hacer esta llamada desde el principio.
1

También si ha probado el servicio en diferentes entornos físicos, y parece que el problema no es el tiempo normal de inicio sino el rendimiento de las PC. Puede aumentar el tiempo de espera en la clave de registro para la PC específica.

Por favor, vea: http://support.microsoft.com/kb/839803

Saludos

Cuestiones relacionadas