Então, nós produzimos um serviço do Windows para alimentar nossos aplicativos 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 fazer isso acontecer 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 de agora em diante, 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 assim :
this.serviceInstaller1.ServiceName = Util.ServiceName;
this.serviceInstaller1.DisplayName = Util.ServiceName;
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
Nesse caso, Util é apenas uma classe estática que carrega o nome do serviço do arquivo de configuração.
Daqui em diante, tentei duas maneiras diferentes de instalar os dois serviços 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, em seguida, 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 instalador, editei o arquivo de configuração e construí o segundo instalador. Quando executei o instalador, ele funcionou bem, mas o serviço não apareceu em services.msc, então executei o comando anterior na segunda base de código instalada.
Ambas as vezes, recebi a seguinte saída do InstallUtil (somente peças relevantes):
Executando uma instalação transacionada.
Iniciando a fase de instalação da instalação.
Instalando o serviço App Service Two ... O Service App Service Two foi instalado com êxito. Criando EventLog fonte App Service Two no aplicativo de log ...
Ocorreu uma exceção 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 ao estado anterior para o App Service Two de origem. Aplicativo de serviço O serviço dois está sendo removido do sistema ... Aplicativo de serviço O serviço dois foi removido com êxito do sistema.
A fase de reversão foi concluída com sucesso.
A instalação transacionada foi concluída. A instalação falhou e o rollback foi executado.
Desculpe pela postagem prolixa, queria ter certeza de que há informações relevantes o suficiente. A parte que até agora me deixou perplexo é que ele afirma que a instalação do serviço foi concluída com êxito e só depois de criar a origem do EventLog é que a NullReferenceException parece ser lançada. Portanto, se alguém souber o que estou fazendo de errado ou tiver uma abordagem melhor, ficaria muito grato.
http://journalofasoftwaredev.wordpress.com/2008/07/16/multiple-instances-of-same-windows-service/
. Você pode inserir o código no instalador para obter o nome do serviço que deseja ao executar o installutil.