Question

Dans les versions antérieures de Windows avant de Vista, vous pouvez avoir un Service Windows interagir avec la session courante de l'utilisateur du bureau pour faciliter l'affichage des informations sur l'écran de service.Dans Windows Vista Session 0 a été ajouté pour plus de sécurité pour isoler les services à partir du bureau.Ce est un moyen facile de communiquer entre un service et une application en cours d'exécution à l'extérieur de la Session 0?Jusqu'à présent j'ai contourné en utilisant le protocole TCP/IP pour communiquer entre les deux, mais il semble être une sorte de bâclé la façon de le faire.

Était-ce utile?

La solution

Vous pouvez utiliser la mémoire partagée ou le canal nommé pour faciliter la CIB en tant que bien.Conceptuellement, cela est similaire à TCP/IP, mais vous n'avez pas à vous soucier de trouver un port inutilisé.

Vous devez vous assurer que le nom des objets que vous créez avec le préfixe "Global\" pour leur permettre d'être accessible par toutes les séances, comme décrit ici.

Autant que je sache, il n'existe aucun moyen pour un service d'interagir directement avec le bureau plus.

Autres conseils

En effet, pour des raisons de sécurité il n'est plus possible de communiquer directement avec le "bureau".Quel est exactement le "bureau" de toute façon, quand vous vivez dans une machine avec plusieurs utilisateurs actifs + sessions à distance?

La façon de résoudre le problème est d'utiliser des applications qui communiquent via un mécanisme RPC (TCP/IP, l'IPC, l' .Net Remoting des Canaux sur l'un de ces, etc).Son une sorte de douleur, mais je pense que les avantages sont la peine de le changer.

Pour le service à parler au bureau, vous êtes un peu coincé avec une des RPC mécanismes.L' .NET remoting (mécanisme deIpcServerChannel n'est-ce pas difficile à mettre en œuvre à cette fin.

Aussi avec .NET une application de bureau peut envoyer des messages directement au service avec les ServiceController.ExecuteCommand.Ces commandes sont reçues par le service de via ServiceBase.OnCustomCommand.C'est même plus facile à faire, et serait tout ce que vous devez si le contrôle du service est votre seule exigence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top