2011-06-03 44 views
7

Tengo una aplicación de consola C# básica que me gustaría ejecutar como un servicio de Windows.Ejecución de una aplicación de consola C# como servicio de Windows

He creado el servicio de Windows usando sc create. Esto funcionó bien, y puedo ver mi servicio bajo services.msc. Cuando intento iniciar este servicio me sale el siguiente error:

Could not start the PROJECT service on Local Computer. Error 1053: The service did not respond to the start or control request in a timely fashion.`

leí que esto podría ser debido al código de servicio tarda más de 30000   ms a ejecutar. Por lo tanto, eliminé la mayor parte del código para que casi nada se esté ejecutando ... pero el mismo error persiste.

Estoy usando .NET 3.5 para este proyecto.

¿Qué podría causar esto?

+0

¿Realmente comenzó su proceso? Sospecho que no está comenzando, – zdan

+0

http://stackoverflow.com/questions/593454/easiest-language-for-creating-a-windows-service/593803#593803 –

Respuesta

9

No puede simplemente tomar cualquier aplicación de consola y ejecutar como servicio de Windows. Primero necesita implementar su clase de servicio que heredaría desde ServiceBase, luego en el punto de entrada (Main) necesita ejecutar el servicio con ServiceBase.Run(new YourService()). En su clase de servicio necesita definir qué sucede cuando el servicio comienza y termina.

Idealmente, también debe agregar ServiceInstaller a su ensamblaje. De esta forma, podrá preestablecer las propiedades de su servicio y usar installutil.exe para instalar el servicio.

+0

¿por qué es esto así? – wulfgarpro

+1

@ WulfgarPro - porque la aplicación de servicio de Windows tiene una arquitectura un poco diferente. Debe definir qué hacer cuando el servicio comienza y termina. –

+2

Hay una herramienta que le permitirá ejecutar una aplicación de consola como un servicio sin modificaciones. Por ejemplo, este: http://runasservice.com –

0

No sé qué es "sc create". Pero lo sé, usando Visual Studio 2010, uno puede construir un proyecto de servicio de Windows. Por cierto, he creado un proyecto de este tipo y funciona bien en todo momento.

+0

'sc create' es cómo puede instalar el servicio de Windows, incluso si no tiene el instalador dentro de su ensamblaje. –

0

No se puede ejecutar ninguna aplicación anterior como un servicio, especialmente en las versiones más recientes de Windows. Se espera que admitan cierta funcionalidad, respondan a ciertas solicitudes y (de nuevo, en versiones recientes de Windows) no interactuar directamente con el usuario.

Si desea un servicio, escriba una aplicación específicamente diseñada para ser un servicio.

0

why is this so? – wulfgar.pro Jun 3 '11 at 1:13

@WulfgarPro - because windows service application has a little different architecture. You need to define what to do when service starts and ends. – Alex Aza Jun 3 '11 at 1:15

(Por desgracia no puedo escribir un comentario todavía.) Es porque SCM (Service Control Manager) controla el canal de servicio ServiceBase clase. Si uno solo necesitara definir lo que hace cuando comienza y se detiene, no habría necesidad de herencia y anulación. Uno podría simplemente crear esos dos métodos. Lamentablemente, hay un poco más de trabajo porque ServiceBase contiene un poco más de funcionalidad.

0

He tenido un gran éxito con TopShelf. Este es un paquete nuget que permite que su aplicación de consola .NET también tenga los ganchos de servicio de Windows necesarios para que pueda ejecutarse felizmente como una aplicación de consola (útil para la depuración) o instalarse como un servicio de Windows.

Cuestiones relacionadas