0

Vista met une nouvelle sécurité empêchant la Session 0 d'accéder au matériel comme la carte vidéo, et l'utilisateur ne se connecte plus à la session 0. Je sais que cela signifie que je ne peux pas montrer une interface utilisateur à l'utilisateur. signifie aussi que je ne peux pas montrer un du tout? La façon dont mon code est configuré maintenant, ce serait plus de travail pour le faire en ligne de commande seulement, cependant si je peux utiliser mon code existant et juste gérer par programmation l'interface graphique, il faudrait beaucoup moins de code.Session 0 Isolation

Est-ce possible?

L'article de MSDN dit ceci:

• Un service tente de créer une interface utilisateur (IU), comme une boîte de dialogue, en session 0. Comme l'utilisateur ne fonctionne pas en session 0, il ou elle ne voit jamais l'interface utilisateur et ne peut donc pas fournir les informations que le service recherche. Le service semble cesser de fonctionner car il attend une réponse de l'utilisateur qui ne se produit pas.

Ce qui me fait penser qu'il est possible d'avoir une interface utilisateur automatisé, mais quelqu'un m'a dit que vous ne pouviez pas utiliser SendKeys avec un service parce qu'il a été désactivé dans la session 0.

EDIT: Je n'a pas besoin de montrer à l'utilisateur l'interface graphique

Répondre

1

Vous pouvez en afficher une; ça ne vient pas.

Il y a une petite notification dans la barre des tâches à propos d'une fenêtre GUI et un moyen d'y accéder.

Quoi qu'il en soit, il existe une commande API TerminalServices pour basculer la session active que vous pourriez appeler si vous en aviez réellement besoin.

0

Vous pouvez écrire un processus distinct qui fournit l'interface utilisateur pour votre processus de service. La communication entre votre interface utilisateur et le processus de service peut être effectuée de différentes manières (recherchez «communication inter-processus» ou «IPC» sur le Web).

0

Votre service peut avoir une interface graphique. C'est simplement qu'aucun humain ne le verra jamais. Comme le suggère la citation MSDN, un service peut afficher une boîte de dialogue. L'appel à MessageBox n'échouera pas; il ne reviendra jamais - il n'y aura personne pour appuyer sur ses boutons.

Je ne suis pas sûr de ce que vous voulez dire en voulant "gérer l'interface graphique." Voulez-vous réellement faire semblant d'envoyer une entrée aux contrôles, comme avec SendInput? Je ne vois pas pourquoi cela ne serait pas possible; vous injecteriez des intrants dans la file d'attente de votre propre programme, après tout, et SendInput's Vista-specific warnings ne diriez rien à ce sujet. Mais je pense que vous rendrez les choses beaucoup plus compliquées qu'elles ne le devraient. Revisitez l'idée de modifier votre programme pour ne pas avoir d'interface utilisateur du tout. Au lieu de simuler les messages de souris nécessaires pour cliquer sur un bouton, par exemple, éliminez l'intermédiaire et appelez simplement directement la fonction que le bouton- événement de clic aurait appelé.