2009-04-27 22 views
12

Tengo un servicio de Windows que no puede iniciarse, dando un error "Error 1053: el servicio no respondió a la solicitud de inicio o control de manera oportuna".Al iniciar un servicio de Windows falla con el error 1053

La ejecución del servicio en mi depurador funciona bien, y si hago doble clic en el servicio .exe en la máquina remota, aparece una ventana de la consola y continúa ejecutándose sin problemas. Incluso puedo ver mensajes de registro que me muestran que el programa está procesando todo como debe ser.

El servicio había estado funcionando bien anteriormente, aunque esta es la primera vez, personalmente, tratando de implementarlo con los cambios más recientes realizados en el programa. Evalué esos cambios y no puedo entender cómo podrían causar este problema, sobre todo porque todo funciona bien cuando no se inicia como un servicio.

El método StartRoutine() de la impulsión del servicio está vacío, por lo que debería devolverse "de manera oportuna".

He comprobado los registros de eventos en la computadora y no proporciona ninguna información adicional que no haya recibido respuesta del servicio en el marco de tiempo requerido de 30 segundos.

Dado que funciona en mi máquina, y como un archivo ejecutable con doble clic, ¿cómo podría averiguar por qué falla como servicio?

Ah, y es .NET 2.0, por lo que no debería verse afectada por el insecto 1,1 marco que exhibe este síntoma (http://support.microsoft.com/kb/839174)

La caja es un servidor Windows 2003 R2 máquina que ejecuta el SP2.

+1

Recibí este error al intentar iniciar un servicio compilado de .NET 4.0 en un servidor con .Net 2.0 instalado – Hovland

Respuesta

4

Podría haber varias cosas y podría ser útil obtener un seguimiento de pila en la máquina que presenta el problema. Hay varias formas de hacerlo, pero el punto es que debe ver dónde está fallando en el código.

Puede hacer esto con remote debugging, pero una cosa simple podría ser simplemente iniciar sesión en el registrador de eventos, o archivo de registro si tiene eso. Literalmente, colocando "WriteLine (" en class :: function() ") en todas las partes del código para ver si lo has creado allí.

Esto al menos te hará mirar en la dirección correcta (que en última instancia es el código)

actualización:..

How to Debug Windows Services Ver el artículo de Microsoft para obtener más información en solucionar problemas de inicio utilizando WinDbg

Este related question detalles maneras agradables para depurar servicios que están escritas en .NET

.
1

Estoy de acuerdo con Scott, la manera más fácil de descubrir lo que está sucediendo es poner algunos rastros en el código de inicio (tal vez ni siquiera llegue a su código de inicio).

Si esto no ayuda, puede publicar su código aquí para que otros puedan echarle un vistazo.

1

tal vez carece de alguna dependencia, intente esto:
- dar de baja su servicio
- registrarse de nuevo

Si fallar en medios de registro que carecen de un módulo.

1

Si el StartRoutine está vacío, probablemente lo esté iniciando en otro lugar.

IIRC debe desconectar un hilo de trabajo y luego volver desde StartRoutine.

+0

Parece que el código se ejecuta enganchando el evento ServiceBase.Elapsed, que está enganchado en el constructor (era haciendo esto antes también, cuando estaba funcionando) – Matt

-2

Otro motivo es Si copia el archivo DLL en modo 'debug' a la carpeta de instalación, este problema vendrá. Lo que necesita hacer es ejecutar el proyecto en modo 'Release' copie el archivo DLL o directamente en la carpeta Release en lugar de Depurar carpeta ,, y copiar esa DLL en la carpeta de instalación, funcionará. Puede ver la reducción en el tamaño de la DLL, no contendrá ningún símbolo de depuración y así

5

Esto es un error engañoso. Probablemente sea una excepción no controlada.

su OnStart() controlador de vacío a continuación, intente esto en su constructor ...

public MainService() 
    { 
     InitializeComponent(); 

     try 
     { 
      // All your initialization code goes here. 

      // For instance, my exception was caused by the lack of registry permissions 
      ; 
     } 
     catch (Exception ex) 
     { 
      EventLog.WriteEntry("Application", ex.ToString(), EventLogEntryType.Error); 
     } 
    } 

Ahora comprobar el EventLog en su sistema para su error de aplicación.

1

Uno de los problemas que pueden provocar este error es si el servicio de Windows que debe implementarse consiste en algún error, es decir, puede ser simple error de autorización o algo así como en mi caso he referenciado algunas carpetas y archivos para el registro no existían, pero cuando se proporcionó la ruta correcta de esos archivos y carpetas, resolvió mi problema.

0

Revisé cada publicación sobre este tema en particular y ninguna de las respuestas resolvió el problema, por lo que agrego esta respuesta en caso de que esto ayude a otra persona. Es cierto que esto solo se aplica a un nuevo servicio, no a este caso específico.

Estaba escribiendo un servicio de escucha de archivos. Como una aplicación de consola, funcionó perfectamente. Cuando lo ejecuté como un servicio, obtuve el mismo error que el anterior. Lo que no sabía (y muchos de los artículos de MSDN sobre los servicios se omiten convenientemente) es que debe ejecutar su clase desde ServiceBase.Run (YourClassName()); De lo contrario, su aplicación se ejecuta y finaliza de inmediato, y dado que finalizó, se obtiene el error anterior incluso si no se produjo ningún error o excepción. Aquí hay un enlace a un artículo sobre esto. De hecho, analiza la configuración de la aplicación para uso doble. Aplicación y servicio de la consola: Create a combo command line/Windows service app

0

Tuve ese problema y el origen de mi problema fue el archivo de configuración. Lo edité en un bloc de notas y el bloc de notas agregó un carácter especial que hace que el servicio no se ejecute correctamente porque el archivo de configuración se arruinó. Vi ese personaje especial en Notepadd ++ y después de eliminarlo, el servicio comenzó a ejecutarse correctamente como lo hizo el anterior.

0

En mi caso, el .NET framework correcto no estaba instalado en el servidor en el que estaba instalando el servicio de Windows.

Cuestiones relacionadas