Pergunta

A minha pergunta é essencialmente o mesmo que o seguinte, mas a resposta não me ajudou.

.NET Windows Service - vários serviços em um projeto

Essencialmente, eu tenho 3 serviços, vamos dizer "Service1", "Serviço" e "Service3".

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
                                {
                                    new Service1("Service1"),
                                    new Service2("Service2"),
                                    new Service3("Service3")
                                };

ServiceBase.Run(ServicesToRun);

Eu também tenho instalador classes com correspondentes serviceInstaller.ServiceName = "ServiceX" para cada um desses serviços.

Quando eu uso installutil, vejo todos os 3 serviços no Service Manager. No entanto, quando eu iniciá-los (alguns ou todos eles) apenas o primeiro ( "Service1") está em execução.

Eu sei que isso é trivial e eu provavelmente pode ter diferentes projectos de instalação para cada um deles, mas no meu caso, é semanticamente faz mais sentido usar apenas um

Sua ajuda é apreciada

Graças Venu

Foi útil?

Solução

Eu criei um projeto 3 Serviço (abaixo), que usa um instalador do projeto para cada serviço. Eu adicionei então um projeto de instalação que instala os serviços em Service Manager. Aqui foi o meu fluxo de trabalho:


  1. Criar 3 serviços em uma solução no Visual Studio 2008. Nomeando cada serviço Service1, Service2 e, Service3. (Ser-se de alterar os nomes de serviços reais para seus respectivos nomes na janela de propriedades.)
  2. Adicionado um projeto Installer para esta solução.
  3. Adicionado os resultados do projeto a partir dos três projetos de serviço para o projeto de instalação.
  4. ações personalizadas adicionadas para todos os três serviços no instalador para instalar os serviços no Service Manager.
  5. construídos e instalados.

Isto dá-me três serviços distintos no Service Manager: Service1, Serviço2 e Service3

Divirta-se!

http://code.google.com/p/multi-service-install /

EDIT:

Eu atualizei o código no repositório de ter um executável, mas dois serviços. Cada serviço é instalado com o gerente de serviço com seu próprio nome e capacidade de iniciar / parar. Eu acho que isso é o que você está querendo, correto? Aqui está o que eu fiz:

  1. Criado um projeto de serviço.
  2. Adicionado um segundo serviço para o mesmo projeto (com um nome de serviço exclusivo).
  3. Adicionado um instalador para ambos os serviços (serviceâ e ServiceB).
  4. No arquivo ProjectInstaller.Designer.vb eu mudei a linha Me.Installers.AddRange para mostrar ambos os instaladores de serviço. (Me.ServiceInstaller1, Me.ServiceInstaller2)
  5. No ponto de entrada principal do serviço principal (serviceâ no meu caso), eu definir a variável ServicesToRun a uma matriz de ServiceBase contendo todos os serviços que eu quero que ele seja executado (serviceâ e ServiceB). Este é um passo importante como o gerente de serviço define uma propriedade com base no número de argumentos aqui - ou para permitir que várias instâncias do mesmo exe ou apenas uma única instância.
  6. Adicionar um projeto de instalação e usar a saída de Serviços.
  7. Adicione uma ação personalizada usando a saída de Serviços.

O código ainda pode ser descarregado a partir do mesmo link acima.

Obrigado!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top