5 votes

Comment attendre que MSTSC.exe se ferme

J'ai créé une application de gestion qui permet également un accès rapide à une session de bureau à distance sur des machines distantes. J'ai besoin d'attendre que le processus se termine, pour pouvoir fermer la connexion VPN au serveur distant. Tout fonctionne correctement, sauf l'attente de la fin du processus.

Le code suivant est utilisé pour démarrer le processus MSTSC et attendre qu'il se termine:

var process = new Process
{
  StartInfo = new ProcessStartInfo("mstsc.exe"),
  EnableRaisingEvents = true
};
process.Exited += (o, e) => Console.WriteLine("Process stopped.");
process.Start();
Console.ReadLine();

L'événement Exited est déclenché presque immédiatement après le démarrage du programme. Lorsque je remplace mstsc.exe par notepad.exe, tout fonctionne comme prévu. Je pensais que MSTSC pouvait se dupliquer et interrompre le processus initial.

Il est pourtant possible d'attendre la fin de MSTSC en utilisant la commande suivante (de l'invite de commandes):

start /wait mstsc.exe

Cette commande ne retourne pas tant que je ne quitte pas la session de bureau à distance. Étant donné cette information, j'ai remplacé mon code par ceci:

var process = new Process
{
  StartInfo = new ProcessStartInfo("cmd.exe"),
  Arguments = "/c start /wait mstsc.exe",
  EnableRaisingEvents = true
};
process.Exited += (o, e) => Console.WriteLine("Process stopped.");
process.Start();
Console.ReadLine();

Cela exécutera CMD.exe et il exécutera la commande start /wait mstsc.exe. Si cela se termine, le processus CMD se termine également et tout va bien (avec un contournement désagréable, mais d'accord). Malheureusement, cela ne se produit pas. Le processus CMD se termine immédiatement. Quelqu'un sait ce que je fais de mal?

-2voto

chris.house.00 Points 1652

Vous devez appeler WaitForExit() après avoir appelé Start():

process.Start();
process.WaitForExit();

Cette surcharge fait en sorte que le thread actuel attende indéfiniment jusqu'à ce que le processus se termine. Il y a aussi une surcharge qui vous permet de spécifier le nombre de millisecondes que vous aimeriez attendre.

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