Posso ter vários serviços hospedados em um único executável do Windows
-
18-09-2019 - |
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
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:
- 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.)
- Adicionado um projeto Installer para esta solução.
- Adicionado os resultados do projeto a partir dos três projetos de serviço para o projeto de instalação.
- ações personalizadas adicionadas para todos os três serviços no instalador para instalar os serviços no Service Manager.
- 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:
- Criado um projeto de serviço.
- Adicionado um segundo serviço para o mesmo projeto (com um nome de serviço exclusivo).
- Adicionado um instalador para ambos os serviços (serviceâ e ServiceB).
- No arquivo ProjectInstaller.Designer.vb eu mudei a linha Me.Installers.AddRange para mostrar ambos os instaladores de serviço. (Me.ServiceInstaller1, Me.ServiceInstaller2)
- 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.
- Adicionar um projeto de instalação e usar a saída de Serviços.
- 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!