Instalar múltiples instancias del mismo servicio de Windows en un servidor

Así que hemos producido un servicio de Windows para enviar datos a nuestra aplicación cliente y todo va bien. El cliente ha creado una solicitud de configuración divertida que requiere dos instancias de este servicio ejecutándose en el mismo servidor y configuradas para apuntar a bases de datos separadas.

Hasta ahora no he podido lograr que esto suceda y esperaba que mis compañeros miembros de stackoverflow pudieran dar algunas pistas sobre por qué.

Configuración actual:

He configurado el proyecto que contiene el servicio de Windows, lo llamaremos AppService de ahora en adelante, y el archivo ProjectInstaller.cs que maneja los pasos de instalación personalizados para establecer el nombre del servicio basado en una clave en el archivo App.config. :

this.serviceInstaller1.ServiceName = Util.ServiceName;
this.serviceInstaller1.DisplayName = Util.ServiceName;
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

En este caso, Util es solo una clase estática que carga el nombre del servicio del archivo de configuración.

De aquí en adelante, he intentado dos formas diferentes de instalar ambos servicios y ambos fallaron de la misma manera.

La primera manera fue simplemente instalar la primera copia del servicio, copiar el directorio instalado y renombrarlo, y luego ejecutar el siguiente comando después de modificar la configuración de la aplicación para cambiar el nombre del servicio deseado:

InstallUtil.exe /i AppService.exe

Cuando eso no funcionó, intenté crear un segundo proyecto de instalación, edité el archivo de configuración y construí el segundo instalador. Cuando ejecuté el instalador funcionó bien, pero el servicio no se mostró en services.msc, así que ejecuté el comando anterior contra la segunda base de código instalada.

En ambas ocasiones recibí la siguiente salida de InstallUtil (solo partes relevantes):

Ejecutando una instalación de transacción.

Comenzando la fase de instalación de la instalación.

Instalación del servicio App Service Two ... Service App Service Two se ha instalado correctamente. Creando EventLog source App Service Two en log Application ...

Se produjo una excepción durante la fase de instalación. System.NullReferenceException: referencia de objeto no establecida en una instancia de un objeto.

La fase de retroceso de la instalación está comenzando.

Restauración del registro de eventos al estado anterior para el Servicio de aplicación de origen dos. La aplicación de servicio El servicio dos se está eliminando del sistema ... La aplicación de servicio El servicio dos se eliminó con éxito del sistema.

La fase de Rollback se completó con éxito.

La instalación realizada se ha completado. La instalación falló, y la reversión se ha realizado.

Lo siento por la larga publicación, quería asegurarse de que haya suficiente información relevante. La pieza que hasta ahora me ha dejado perplejo es que indica que la instalación del servicio se completa con éxito y solo después de crear la fuente EventLog que parece que se lanza la NullReferenceException. Entonces, si alguien sabe lo que estoy haciendo mal o tiene un mejor enfoque, sería muy apreciado.

Respuestas a la pregunta(10)

Su respuesta a la pregunta