Além do service.StartType = ServiceStartMode.Automatic meu serviço não inicia após a instalação
Solução
Inseri este código no meu ProjectInstaller
protected override void OnAfterInstall(System.Collections.IDictionary savedState)
{
base.OnAfterInstall(savedState);
using (var serviceController = new ServiceController(this.serviceInstaller1.ServiceName, Environment.MachineName))
serviceController.Start();
}
Agradecimentos a ScottTx e Francis B.
.net
windows-services
installer
Jader Dias
fonte
fonte
Respostas:
Você pode fazer tudo isso de dentro do executável do serviço em resposta a eventos disparados do processo InstallUtil. Substitua o evento OnAfterInstall para usar uma classe ServiceController para iniciar o serviço.
http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceinstaller.aspx
fonte
Publiquei um procedimento passo a passo para criar um serviço do Windows em C # aqui . Parece que você chegou pelo menos a este ponto e agora está se perguntando como iniciar o serviço depois de instalado. Definir a propriedade StartType como Automático fará com que o serviço seja iniciado automaticamente após a reinicialização do sistema, mas não (como você descobriu) iniciará automaticamente o serviço após a instalação.
Não me lembro onde o encontrei originalmente (talvez Marc Gravell?), Mas encontrei uma solução online que permite que você instale e inicie seu serviço executando o próprio serviço. Aqui está o passo a passo:
Estruture a
Main()
função do seu serviço assim:Aqui está o código de suporte:
Continuando com o código de suporte ...
Neste ponto, depois de instalar o serviço na máquina de destino, apenas execute o serviço na linha de comando (como qualquer aplicativo comum) com o
-install
argumento da linha de comando para instalar e iniciar o serviço.Acho que abordei tudo, mas se você achar que isso não funciona, entre em contato para que eu possa atualizar a resposta.
fonte
YourServiceType
é o queProjectInstaller
você adicionou ao serviço que contémServiceInstaller
eServiceProcessInstaller
Estúdio visual
Se você estiver criando um projeto de instalação com o VS, pode criar uma ação personalizada que chamou um método .NET para iniciar o serviço. Porém, não é realmente recomendável usar a ação personalizada gerenciada em um MSI. Veja esta página .
InstallShield ou Wise
Se você estiver usando o InstallShield ou Wise, esses aplicativos fornecem a opção de iniciar o serviço. Por exemplo, com o Wise, você deve adicionar uma ação de controle de serviço. Nesta ação, você especifica se deseja iniciar ou parar o serviço.
Wix
Usando o Wix, você precisa adicionar o seguinte código xml no componente do seu serviço. Para mais informações sobre isso, você pode verificar esta página .
fonte
Você precisa adicionar uma ação personalizada ao final da sequência 'ExecuteImmediate' no MSI, usando o nome do componente do EXE ou um lote (início do sc) como origem. Não acho que isso possa ser feito com o Visual Studio, talvez seja necessário usar uma ferramenta de criação MSI real para isso.
fonte
Para iniciá-lo logo após a instalação, eu gero um arquivo em lote com installutil seguido por sc start
Não é o ideal, mas funciona ....
fonte
Use a classe .NET ServiceController para iniciá-lo ou emita o comando de linha de comando para iniciá-lo --- "net start servicename". Qualquer uma das maneiras funciona.
fonte
Para adicionar à resposta do ScottTx, aqui está o código real para iniciar o serviço se você estiver fazendo maneira Microsoft (ou seja, usando um projeto de instalação, etc ...)
(desculpe o código VB.net, mas é nisso que estou preso)
Para criar o manipulador de eventos acima, vá para o designer ProjectInstaller onde estão os 2 controladores. Clique no controle ServiceInstaller1. Vá para a janela de propriedades em eventos e lá você encontrará o evento AfterInstall.
Nota: Não coloque o código acima no evento AfterInstall para ServiceProcessInstaller1. Não vai funcionar, vindo da experiência. :)
fonte
A solução mais fácil é encontrada aqui install-windows-service-without-installutil-exe por @ Hoàng Long
fonte