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