c# - É possível executar um aplicativo .EXE a partir de um Windows Service? - Stack Overflow em Português
É possível executar um aplicativo .EXE a partir de um Windows Service?
Este é um trecho do código:
Process.Start(@"C:\path\<file.exe>");
Eu gostaria de poder executar um programa .exe dentro do onStart(), porém, usando o método de Process.Start() não funciona. Tem outra forma de fazer isto? Caso sim, qual seria?
c# .net windows-service
editada 6/05 às 14:28
51211 medalhas de prata1414 medalhas de bronze
perguntada 3/05 às 14:45
Paulo MoraesPaulo Moraes
Não entendi o que você quer dizer com interno. Você quer que o seu windows service execute/abra outro programa ou que ele interaja com ele? – Leandro Angelo 3/05 às 15:31
Isso não é possível. Serviços do Windows não podem executar aplicativos executáveis ou invocá-los, diferente de aplicativos do Windows como Winforms, Console ou WPF. Seu código vai funcionar em qualquer aplicação que não seja um serviço do Windows.
O Windows tem um mecanismo de segurança com que faz que serviços sejam executados em sessões isoladas do contexto do usuário, portanto, não existe um contexto de onde iniciar o executável.
Executáveis do Windows somente são iniciados em um contexto, seja administrador, sistema ou qualquer usuário. Como um serviço não está em contexto específico, e sim uma sessão isolada, não há onde executar o aplicativo.
Existe uma maneira insegura e não recomendada de executar um executável a partir de um serviço: injetando o executável em um processo já existente. Portanto, isso pode tornar o sistema instável e passará a ser considerado um malware desde então. Mais detalhes nesta resposta do Stack Overflow.
editada 6/05 às 12:16
respondida 4/05 às 21:28
5.0792020 medalhas de prata5757 medalhas de bronze
Uhm, entendi. Obrigado amigo, muito esclarecedor. Vou analisar a resposta que você indicou. – Paulo Moraes 5/05 às 15:42
<<AVISO>> Não sei se vai funcionar pois Serviços possuem um mecanismo de isolamento que não permitem invocar janelas. Não sei se isso se aplica a processos sem janelas. Caso funcione de um retorno nos comentários
Instancie a classe Process antes de usar o método Start e use a propriedade StratInfo para configurar a inicialização do processo.
Process processo;
processo = new Process()
// Não exibe o shell
// Carrega o caminho do seu arquivo
processo.StartInfo.FileName = @"C:\path\<file.exe>";
//Não criar janela de processo
// Inicializar o processo
Caso seu processo persista por todo o seu serviço:
editada 3/05 às 16:23
respondida 3/05 às 16:14
Primeiro, obrigado por responder. Sobre sua resposta, eu já havia tentado desta maneira porém não obtive sucesso. – Paulo Moraes 5/05 às 15:39
Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag c# .net windows-service ou faça sua própria pergunta.