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.