Instalando várias instâncias do mesmo serviço do Windows em um servidor

Então, produzimos um serviço do Windows para alimentar dados para nosso aplicativo cliente e tudo está indo muito bem. O cliente apresentou uma solicitação de configuração divertida que requer duas instâncias desse serviço em execução no mesmo servidor e configuradas para apontar para bancos de dados separados.

Até agora não consegui que isso acontecesse e esperava que meus colegas membros do stackoverflow pudessem dar algumas dicas do porquê.

Configuração atual:

Eu configurei o projeto que contém o serviço do Windows, vamos chamá-lo de AppService a partir de agora, e o arquivo ProjectInstaller.cs que lida com as etapas de instalação personalizadas para definir o nome do serviço com base em uma chave no App.config como :

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

Neste caso, o Util é apenas uma classe estática que carrega o nome do serviço do arquivo de configuração.

A partir daqui, tentei duas maneiras diferentes de obter os dois serviços instalados e ambos falharam de maneira idêntica.

A primeira maneira era simplesmente instalar a primeira cópia do serviço, copiar o diretório instalado e renomeá-lo e depois executar o seguinte comando após modificar a configuração do aplicativo para alterar o nome do serviço desejado:

InstallUtil.exe /i AppService.exe

Quando isso não funcionou, tentei criar um segundo projeto de instalação, editei o arquivo de configuração e criei o segundo instalador. Quando eu corri o instalador funcionou bem, mas o serviço não apareceu em services.msc, então eu corri o comando anterior contra a segunda base de código instalada.

Ambas as vezes recebi a seguinte saída do InstallUtil (apenas partes relevantes):

Executando uma instalação transacionada.

Começando a fase de instalação da instalação.

Instalando o serviço App Service Two ... O Service App Service Two foi instalado com sucesso. Criando EventLog source App Service Dois no aplicativo de log ...

Uma exceção ocorreu durante a fase de instalação. System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.

A fase de reversão da instalação está começando.

Restaurando o log de eventos para o estado anterior para o App Service de origem Dois. Service App Service Dois está sendo removido do sistema ... Service App Service Two foi removido com sucesso do sistema.

A fase de reversão foi concluída com sucesso.

A instalação transacionada foi concluída. A instalação falhou e a reversão foi executada.

Desculpem o longo post, quero ter certeza de que há informações relevantes suficientes. A parte que até agora me deixou perplexa é que ela afirma que a instalação do serviço é concluída com êxito e só depois que ele cria a origem do EventLog que o NullReferenceException parece ser acionado. Então, se alguém sabe o que estou fazendo errado ou tem uma abordagem melhor, seria muito apreciado.

questionAnswers(10)

yourAnswerToTheQuestion