J'ai un service Windows fonctionnant sous le compte "SYSTEM" qui vérifie si une application spécifique est en cours d'exécution pour chaque utilisateur connecté. Si l'application n'est pas en cours d'exécution, le service la démarre (sous le nom d'utilisateur correspondant).
J'essaie d'atteindre mon objectif en utilisant CreateProcessAsUser(). Le service démarre l'application sous le nom d'utilisateur correspondant, mais l'interface graphique n'est pas dessinée. (Oui, je m'assure que la case à cocher "Autoriser le service à interagir avec le bureau" est activée).CreateProcessAsUser ne dessine pas l'interface graphique
Système: XP SP3, langue: C#
Voici un code qui pourrait intéresser:
PROCESS_INFORMATION processInfo = new PROCESS_INFORMATION();
startInfo.cb = Marshal.SizeOf(startInfo);
startInfo.lpDesktop = "winsta0\\default";
bResult = Win32.CreateProcessAsUser(hToken, null, strCommand, IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startInfo, out processInfo);
Pour autant que je comprends, la mise en startInfo.lpDesktop = "winsta0 \ default"; aurait dû utiliser le bureau de l'utilisateur correspondant.
Même contrairement à ce qui est indiqué ici: http://support.microsoft.com/kb/165194, j'ai essayé de définir lpDesktop à null, ou pas du tout, tous les deux donnant le même résultat: processus a été démarré dans le nom de l'utilisateur attendu et je pouvais voir une partie du titre de la fenêtre bar. La fenêtre "invisible" intercepte les événements de clic de souris, les gère comme prévu. Il ne se dessine tout simplement pas.
Quelqu'un connaît-il un tel problème et sait ce que je fais mal?
Je suis confronté au même problème, avez-vous trouvé une solution? –