Permettre au service d'interagir avec le bureau sous Windows

dans services.msc > Action > propriétés > ouvrir une session > permettre au service d'interagir avec le bureau, j'ai permis à mon service d'interagir avec le bureau. Que veut dire exactement? Comment puis-je l'utiliser pour jouer le son (MP3, WAV, etc.) de mon service?

services.msc  Action  Properties  Log On  Allow service to interact with desktop

11
demandé sur Palec 2010-11-21 12:40:06

4 réponses

je vais prendre quelques libertés ici en essayant d'interpréter votre question à partir de mots clés. À l'avenir, veuillez passer plus de temps à écrire vos questions afin qu'elles aient un sens pour une autre personne qui essaie de les lire et de les comprendre.

il y a une case à cocher sous l'onglet Connexion dans la fenêtre Propriétés pour un service Windows qui s'appelle " permettre au service d'interagir avec le bureau." Si vous essayez de cocher cette case par programmation, vous devez spécifier le SERVICE_INTERACTIVE_PROCESS drapeau lorsque vous créez votre service à l'aide de la CreateService de l'API. (Voir MSDN ).

notez cependant qu'à partir de Windows Vista, il est strictement interdit aux services d'interagir directement avec un utilisateur:

Important: les Services ne peuvent pas interagir directement avec un utilisateur à partir de Windows Vista. Par conséquent, l' techniques mentionnées dans la section intitulé utiliser un Service interactif ne doit pas être utilisé dans le nouveau code.

ce" trait " est cassé, et la sagesse conventionnelle dicte que vous ne devriez pas avoir compté sur elle de toute façon. Les Services ne sont pas censés fournir une assurance-chômage ou permettre un type quelconque d'interaction directe avec les utilisateurs. Microsoft a mis en garde que cette fonctionnalité soit évitée depuis les premiers jours de Windows NT en raison des risques de sécurité possibles. Larry Osterman explique pourquoi c'était toujours une mauvaise idée . Et il est pas le seul .

il sont certains possible solutions de rechange , cependant, si vous absolument doit avoir cette fonctionnalité. Mais je vous recommande vivement d'examiner attentivement sa nécessité et d'explorer des conceptions alternatives pour votre service.

26
répondu Cody Gray 2017-05-23 11:53:47

Parce que le service n'est pas exécuté dans le contexte d'une session utilisateur, vous créez une deuxième application pour interagir avec le service.

par exemple, le serveur SQL de Microsoft a un outil de surveillance. Cette application fonctionne dans la session de l'utilisateur et se connecte au service vous fournissant des informations sur si le service est en cours d'exécution et vous permettant d'arrêter et de démarrer le service de base de données.

étant donné que cette demande ne exécuter dans une session d'utilisateur, vous pouvez interagir avec le bureau à travers cette application.

5
répondu Pieter van Ginkel 2010-11-21 09:50:35

vous devez ajouter serviceinstaller et noter ci-dessous le code en cas de commit de serviceinstaller.

using System.Management;

using System.ComponentModel;

using System.Configuration.Install;

 private void serviceInstaller1_Committed(object sender, InstallEventArgs e)

        {
            ConnectionOptions coOptions = new ConnectionOptions();
            coOptions.Impersonation = ImpersonationLevel.Impersonate;
            ManagementScope mgmtScope = new ManagementScope(@"root\CIMV2", coOptions);
            mgmtScope.Connect();
            ManagementObject wmiService;
            wmiService = new ManagementObject("Win32_Service.Name='" + serviceInstaller1.ServiceName + "'");
            ManagementBaseObject InParam = wmiService.GetMethodParameters("Change");
            InParam["DesktopInteract"] = true;
            ManagementBaseObject OutParam = wmiService.InvokeMethod("Change", InParam, null);
        }
4
répondu Rupesh Kadam 2011-02-21 08:49:56

wmiService = new ManagementObject(" Win32_Service .Name='" + serviceInstaller1.ServiceName + "'");

sur une machine 64 bits ?

-4
répondu Venkatesh Boda 2011-12-18 19:10:30