Eu tenho um serviço do Windows que instalo usando o InstallUtil.exe. Mesmo tendo definido o método de inicialização como automático, o serviço não inicia quando instalado, preciso abrir os serviços manualmente e clicar em iniciar. Existe uma maneira de iniciá-lo através da linha de comando ou através do código do Serviço?
c#
windows-services
mickyjtwin
fonte
fonte
ServiceController
declaração usando.ServiceInstaller
variável em sua classe. Essa classe deve ser implementadaSystem.Configuration.Install.Installer
. Veja este guia msdn para mais informações.serviceInstaller
é oServiceInstaller
objeto referidosender
no manipulador de eventos, que normalmente é instanciado noServiceInstaller()
construtor. Portanto, você pode adicionarServiceInstaller serviceInstaller = (ServiceInstaller)sender;
antes dausing
declaração.Após refatorar um pouco, este é um exemplo de um instalador completo de serviços do Windows com inicialização automática:
fonte
Que tal seguir os comandos?
fonte
Opções programáticas para controle de serviços:
StartService
método Isso é bom para casos em que você precisa executar outro processamento (por exemplo, para selecionar qual serviço).Start-Service
viaRunspaceInvoke
ou criando seu próprioRunspace
e usando seuCreatePipeline
método para executar. Isso é bom para os casos em que você precisa executar outro processamento (por exemplo, para selecionar qual serviço) com um modelo de codificação muito mais fácil que o WMI, mas depende da instalação do PSH.ServiceController
fonte
Você pode usar a seguinte linha de comando para iniciar o serviço:
fonte
Use ServiceController para iniciar seu serviço a partir do código.
Atualização: E a maneira mais correta de iniciar o serviço na linha de comando é usar o comando "sc" ( Controlador de serviço ) em vez de "net".
fonte
Apesar de seguir exatamente a resposta aceita, ainda não consegui iniciar o serviço - recebi uma mensagem de falha durante a instalação informando que o serviço recém-instalado não pôde ser iniciado, pois não existia, apesar de usar
this.serviceInstaller.ServiceName
bastante do que um literal ...Acabei encontrando uma solução alternativa que faz uso da linha de comando:
fonte
Inicialização automática significa que o serviço é iniciado automaticamente quando o Windows é iniciado. Como outros já mencionaram, para iniciá-lo no console, você deve usar o ServiceController.
fonte
Você pode usar o
GetServices
método da classe ServiceController para obter uma matriz de todos os serviços. Em seguida, encontre seu serviço verificando aServiceName
propriedade de cada serviço. Quando você encontrar seu serviço, ligue para oStart
método para iniciá-lo.Você também deve verificar a
Status
propriedade para ver em que estado ela já está antes de chamar o início (pode estar em execução, pausado, parado, etc.).fonte
Você corrompeu seu designer. Adicione novamente o componente instalador. Ele deve ter um serviceInstaller e um serviceProcessInstaller. O serviceInstaller com a propriedade Startup Method definida como Automatic será inicializado quando instalado e após cada reinicialização.
fonte
Apenas uma observação: você pode ter configurado seu serviço de maneira diferente usando a interface de formulários para adicionar um instalador de serviço e instalador de projeto. Nesse caso, substitua onde diz serviceInstaller.ServiceName por "name from designer" .ServiceName.
Você também não precisa de membros privados neste caso.
Obrigado pela ajuda.
fonte