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?