Pergunta

Nas versões anteriores do Windows, anteriores ao Vista, você poderia fazer com que um serviço do Windows interagisse com o usuário da área de trabalho conectado no momento para exibir facilmente as informações do serviço na tela.No Windows Vista, a Sessão 0 foi adicionada por segurança para isolar os serviços da área de trabalho.Qual é uma maneira fácil de comunicação entre um serviço e um aplicativo em execução fora da Sessão 0?Até agora, consegui contornar isso usando TCP/IP para comunicação entre os dois, mas parece ser uma maneira meio desleixada de fazer isso.

Foi útil?

Solução

Você também pode usar memória compartilhada ou pipe nomeado para facilitar o IPC.Conceitualmente, isso é semelhante ao TCP/IP, mas você não precisa se preocupar em encontrar uma porta não utilizada.

Você deve certificar-se de que os objetos nomeados que você cria tenham o prefixo "Global\" para permitir que eles sejam acessados ​​por todas as sessões conforme descrito aqui.

AFAIK, não há mais como um serviço interagir diretamente com a área de trabalho.

Outras dicas

Na verdade, por razões de segurança já não é possível comunicar directamente com o “desktop”.O que exatamente é o "desktop", quando você mora em uma máquina com vários usuários ativos + sessões remotas?

A maneira geral de resolver o problema é usar aplicativos de serviço que se comunicam através de algum mecanismo RPC (TCP/IP, IPC, .Net Remoting Channels através de um deles, etc.).É meio chato, mas acho que os benefícios valem a pena a mudança.

Para que o serviço se comunique com a área de trabalho, você está praticamente preso a um dos mecanismos RPC.O mecanismo de comunicação remota .NET (IpcServerChannel) não é muito difícil de implementar para esse propósito.

Também com o .NET, um aplicativo de desktop pode enviar mensagens diretamente para o serviço com o ServiceController.ExecuteCommand.Esses comandos são recebidos pelo serviço via ServiceBase.OnCustomCommand.Isso é ainda mais fácil de fazer e seria tudo de que você precisa se controlar o serviço for seu único requisito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top