6 votes

Créer un service Windows pour ouvrir un programme - Delphi

Je crée un service Windows avec Delphi. Ce que mon service doit faire en gros, c'est ouvrir un programme. Dans mon code j'utilise WinExec(aux,SW_SHOWNORMAL);. Quand je lance et exécute le service, rien ne semble se passer, mais quand je regarde dans le Gestionnaire des tâches, le programme que mon service devrait ouvrir est dans la liste et dans la colonne Nom d'utilisateur il est indiqué SYSTEM.

Donc le programme s'ouvre mais ne s'affiche pas à l'écran. J'ai cherché sur Google et trouvé des fonctions comme CreateProcess mais je ne sais pas comment l'utiliser. Qu'est-ce que je fais de travers ?

Désolé pour mon mauvais anglais.

6voto

Remy Lebeau Points 130112

Les services s'exécutent toujours dans la Session 0. Un processus démarré par un service s'exécute par défaut dans la Session du service, sauf si le service utilise CreateProcessAsUser() pour exécuter le processus dans une Session différente.

Sous XP et antérieures, le premier utilisateur à se connecter s'exécute également dans la Session 0 (les utilisateurs suivants s'exécutent dans les Sessions 1+). Ainsi, si le service est marqué comme interactif lors de son installation et qu'il lance un processus qui a une interface utilisateur, un utilisateur s'exécutant dans la Session 0 peut voir l'interface.

Sous Vista et versions ultérieures, cela n'est plus possible. Les utilisateurs n'exécutent jamais dans la Session 0 désormais, et les services ne peuvent plus être marqués comme interactifs. Cela est connu sous le nom "Isolation de la Session 0". Un service doit désormais utiliser CreateProcessAsUser() afin d'exécuter un processus d'interface utilisateur dans une Session interactive pour qu'un utilisateur puisse le voir.

Référez-vous à MSDN pour plus de détails:

Isolation de la Session 0

Impact de l'isolation de la Session 0 sur les services et pilotes dans Windows

Appeler CreateProcessAsUser() depuis un service

Lancement d'un processus interactif depuis un service Windows dans Windows Vista et ultérieurs

Fonction CreateProcessAsUser

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X