Estoy tratando de construir varios servicios de Windows para hacer cosas diferentes. Por ejemplo, necesito servicios de Windows que:Varios servicios de Windows en un exe
- Enviar un informe diario por correo electrónico
- periódicamente la limpieza algo de información archivado cada 30 minutos
- etc.
Las tareas que necesito las ventanas Los servicios para hacer son distintos, así que no me gusta la idea de tenerlos todos en un solo servicio.
Lo que tengo hasta ahora es un proyecto en Visual Studio 2008. He creado un servicio de Windows, he configurado un temporizador en el evento OnStart (solo escribe en un archivo de texto cada 5 segundos para fines de prueba). Luego agregué un Instalador al proyecto y cuando ejecuto InstallUtil.exe, todo funciona bien.
El problema aparece cuando agrego un segundo servicio de Windows para el mismo proyecto. Configuré el código OnStart nuevamente, con la misma información de registro (ligeramente diferente para poder decir qué servicio está escribiendo en el registro). Con el segundo servicio de Windows, he cambiado el evento principal en Program.cs de:
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
a:
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new Service1(),
new Service2()
};
ServiceBase.Run(ServicesToRun);
}
En este momento, no hay errores en tiempo de compilación, pero el servicio Servicio2 nunca lo hace cualquier cosa ... la tarea de registro nunca se dispara.
Lo reduje al hecho de que el segundo servicio no tiene un "Instalador" asociado. Luego traté de agregar un Instalador de la manera en que lo hice con el primer servicio (es decir, hago clic con el botón derecho en el diseñador del servicio y hago clic en "Agregar instalador"). Ahora, cuando voy al archivo ProjectInstaller.cs, hay otro serviceInstaller allí (serviceInstaller2).
Ahora cuando genere el proyecto y tratar de instalar los servicios, y voy a la ventana del panel de control "Servicios", y que intenta iniciar Service1, me sale el siguiente mensaje de error:
de Windows no se pudo iniciar el servicio Service1 en la computadora local.
Error 1083: El programa ejecutable que este servicio está configurado para ejecutarse no implementa el servicio.
Aparece el mismo mensaje de error si trato de iniciar Service2 también (con la excepción de que el mensaje de error identifica Service2, por supuesto).
¿Hay algo que me falta para poder ejecutar dos servicios desde un ejecutable?
¿Hay alguna razón en particular que no sea "yo quiero" que Necesita tener los servicios en un solo ejecutable? Normalmente, modularidad sería preferible, pero puede tener circunstancias atenuantes que requieren lo contrario. – bsneeze
La única razón real es para facilitar la instalación y el despliegue. Todos los "servicios" son piezas de funcionalidad bastante rápidas, por lo que preferiría no tener que instalar x cantidad de servicios de Windows para pequeños fragmentos de código. –
@pyrochild: estoy seguro de que hay numerosas razones para montar varios servicios en un solo ensamblaje. Donde trabajo ahora utilizamos bestias de ese diseño por cliente: hace que el software de prueba que interactúa con esos servicios sea muy sencillo. – Hardryv