none
Aplicação de "windows service" comandada por ícone no system tray, funciona no windows 7? RRS feed

  • Pergunta

  • Bom dia colegas,

     

    Então, me encontro com um pequeno problema: tenho uma aplicação do tipo "windows service" que roda como serviço do windows e que precisaria ser controlada (pausada, resumida, iniciada) por um pequeno ícone no system tray... acontece que pesquisei uma forma de fazer isso funcionar no windows 7 na internet, mas não estava localizando essa informação, apenas li que esse tipo de aplicação seria impossível de ser feita em um único projeto, pois um serviço de windows não teria acesso ao desktop...

     

    Então, vim aqui pedir essa ajuda, vocês teriam alguma sugestão? já passaram por esse problema?

     

    Um forte abraço!

    quinta-feira, 29 de abril de 2010 13:46

Respostas

  • Olá Mesquita,

    Essa não é uma característica apenas do Windows 7, mas de qualquer versão do Windows, pois o seu serviço nunca deveria interagir com a área de trabalho diretamente, uma vez  que o Windows Service é executado em um contexto totalmente diferente do usuário logado.

    Aliás, você pode ter múltiplos usuários logados em uma mesma máquina... Como é que o serviço iria "adivinhar" em qual desses usuários a interação deve ocorrer?

    Mais, se não existir nenhum usuário logado, o serviço é executado na mesma, já que o Windows Service é executado no seu próprio contexto, antes mesmos de ter um usuário logado na máquina.

    A minha sugestão (e a prática mais comum para interação entre Windows Service e Desktop), é você criar DUAS aplicações diferentes... Um Windows Service e outra aplicação Desktop (WPF ou Windows Forms) que é executada após o usuário efetuar login (via menu iniciar, por exemplo), e que poderia ter apenas um ícone na bandeja para indicar que está rodando.

    Essa aplicação Desktop é que ficaria responsável por executar as outras aplicações, á pedido do Windows Service, quando chegar o momento...

    Essas duas aplicações podem comunicar-se de diferentes formas... Provavelmenente através de um serviço WCF, ou então diretamente via Named Pipes, TCP/IP, SharedMemory, ou outro mecanismo qualquer.


    Abraços,
    Caio Proiete


    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://www.caioproiete.com

    quinta-feira, 29 de abril de 2010 14:12
    Moderador

Todas as Respostas

  • Olá Mesquita,

    Essa não é uma característica apenas do Windows 7, mas de qualquer versão do Windows, pois o seu serviço nunca deveria interagir com a área de trabalho diretamente, uma vez  que o Windows Service é executado em um contexto totalmente diferente do usuário logado.

    Aliás, você pode ter múltiplos usuários logados em uma mesma máquina... Como é que o serviço iria "adivinhar" em qual desses usuários a interação deve ocorrer?

    Mais, se não existir nenhum usuário logado, o serviço é executado na mesma, já que o Windows Service é executado no seu próprio contexto, antes mesmos de ter um usuário logado na máquina.

    A minha sugestão (e a prática mais comum para interação entre Windows Service e Desktop), é você criar DUAS aplicações diferentes... Um Windows Service e outra aplicação Desktop (WPF ou Windows Forms) que é executada após o usuário efetuar login (via menu iniciar, por exemplo), e que poderia ter apenas um ícone na bandeja para indicar que está rodando.

    Essa aplicação Desktop é que ficaria responsável por executar as outras aplicações, á pedido do Windows Service, quando chegar o momento...

    Essas duas aplicações podem comunicar-se de diferentes formas... Provavelmenente através de um serviço WCF, ou então diretamente via Named Pipes, TCP/IP, SharedMemory, ou outro mecanismo qualquer.


    Abraços,
    Caio Proiete


    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://www.caioproiete.com

    quinta-feira, 29 de abril de 2010 14:12
    Moderador
  • Boa tarde,

     

    Complementando o que o Caio Proiete disse posso acrescentar aqui no forum como voce pode configura para aparecer o icone da sua aplicacao na bandeja do windows usando WPFs de uma forma bem simples. Segue o link do tutorial!

     

    http://ahover.com/websites/ahover/?p=295

     

    Abraço

    @leonardomack

     

     

    terça-feira, 21 de dezembro de 2010 20:33