none
Abrir um executável usando Windows Service RRS feed

  • Pergunta

  • Olá galera, estou tendo uma dificuldade com o Serviço do Windows. Criei um serviço que fica monitorando se um programa meu esta sendo executado, se ele não tiver sendo executado o serviço deve abrir ele.

    Tudo funcionou perfeito, porém quando o executável é aberto ele fica em segundo plano, assim ele não funciona como deveria. 

    Gostaria de saber se alguém sabe abrir um executável usando o serviço do windows em primeiro plano normal, como se o usuário tivesse aberto ele.

    Código para abrir arquivo.

    private void OnElapsedTime(object source, ElapsedEventArgs e)
    {
    	//verificando se já existe o programa ativo
    	IntPtr hWnd = FindWindow(null, "Nome do Programa");
    
    	if (hWnd != IntPtr.Zero)
    		return;
    
    	try
    	{
    		System.Diagnostics.Process.Start(@"C:\Pasta\NomeDoPrograma.exe");
    	}
    	catch (Exception ex)
    	{
    		EventLog.WriteEntry("Erro ao abrir o programa. ERRO: " + ex.Message, EventLogEntryType.Error);
    	}
    }

    Att,
    Gustavo Freitas

    quinta-feira, 29 de outubro de 2015 11:28

Respostas

  • Gustavo,

    Na minha opinião, vc está trabalhando de forma errada. Windows Services não devem ser aplicações que manipulam interfaces, mas sim processos executando em background.

    No meu caso, faria as coisas de uma forma um pouco diferente:

    1) Manteria o Windows Service, de forma que o processamento continue sendo realizado.

    2) Criaria uma tela para este executável, que entendo ser uma janela de monitoramento (ou até mesmo configuração do serviço). A comunicação entre as duas telas se faria a partir de tabelas no banco de dados.

    Esta abordagem que te falei venho utilizando há anos, sem problemas na implementação deste tipo de prática.

    Espero ter ajudado.

    Abs

    • Sugerido como Resposta Renato GroffeMVP quinta-feira, 29 de outubro de 2015 12:52
    • Marcado como Resposta Marcos SJ quinta-feira, 29 de outubro de 2015 12:53
    quinta-feira, 29 de outubro de 2015 12:52

Todas as Respostas

  • Gustavo,

    Na minha opinião, vc está trabalhando de forma errada. Windows Services não devem ser aplicações que manipulam interfaces, mas sim processos executando em background.

    No meu caso, faria as coisas de uma forma um pouco diferente:

    1) Manteria o Windows Service, de forma que o processamento continue sendo realizado.

    2) Criaria uma tela para este executável, que entendo ser uma janela de monitoramento (ou até mesmo configuração do serviço). A comunicação entre as duas telas se faria a partir de tabelas no banco de dados.

    Esta abordagem que te falei venho utilizando há anos, sem problemas na implementação deste tipo de prática.

    Espero ter ajudado.

    Abs

    • Sugerido como Resposta Renato GroffeMVP quinta-feira, 29 de outubro de 2015 12:52
    • Marcado como Resposta Marcos SJ quinta-feira, 29 de outubro de 2015 12:53
    quinta-feira, 29 de outubro de 2015 12:52
  • Gustavo,

    Na minha opinião, vc está trabalhando de forma errada. Windows Services não devem ser aplicações que manipulam interfaces, mas sim processos executando em background.

    No meu caso, faria as coisas de uma forma um pouco diferente:

    1) Manteria o Windows Service, de forma que o processamento continue sendo realizado.

    2) Criaria uma tela para este executável, que entendo ser uma janela de monitoramento (ou até mesmo configuração do serviço). A comunicação entre as duas telas se faria a partir de tabelas no banco de dados.

    Esta abordagem que te falei venho utilizando há anos, sem problemas na implementação deste tipo de prática.

    Espero ter ajudado.

    Abs

    Então, é que no meu caso, eu preciso sempre manter um programa de monitoramento de arquivos aberto. Porém as vezes esse programa fecha, por n motivos. Estou trabalhando em eliminar todos as possibilidades dele fechar.

    A minha intenção era criar um serviço que ficaria monitorando esse meu programa, se ele fechar o serviço abriria ele novamente. Ou seja, o serviço não faz nada além de abrir o programa quando ele for fechado. Por não conhecer Windows Service talvez devo ter me equivocado em usa-lo para realizar essa tarefa.

    quinta-feira, 29 de outubro de 2015 14:01
  • nao tem como voce fazer isso devido ao serviço trabalhar na sessão 0, uma sessão de usuario é reservada ao sistema operacional que server para subir os serviços.

    de uma lida aqui para mais informações.


    Eduardo Bicudo Junior


    • Editado Eduardo xUni quinta-feira, 29 de outubro de 2015 15:57
    quinta-feira, 29 de outubro de 2015 15:57
  • Para quem busca uma solução para um problema técnico ter uma resposta como essa é lastimável ! Imagine que seu cliente definiu a arquitetura desta forma ou você herdou de alguém! Você vai falar para seu cliente que esta errado o que ele fez? Conselho, busque soluções em lugares ondem tenham profissionais de desenvolvimento. 
    quinta-feira, 19 de dezembro de 2019 16:59