我创建了一个管理应用程序,它还允许快速访问远程计算机的远程桌面会话。我需要等到进程结束,才能关闭与远程服务器的 VPN 连接。一切正常,除了等待过程结束。
以下代码用于启动 MSTSC 进程并等待它结束:
var process = new Process
{
StartInfo = new ProcessStartInfo("mstsc.exe"),
EnableRaisingEvents = true
};
process.Exited += (o, e) => Console.WriteLine("Process stopped.");
process.Start();
Console.ReadLine();
该Exited
事件几乎在程序启动后立即引发。当我替换mstsc.exe
一切notepad.exe
按预期工作时。我认为 MSTSC 可能会自行分叉并中止初始过程。
但是可以使用以下命令(从命令行)等待 MSTSC 结束:
start /wait mstsc.exe
在我退出远程桌面会话之前,此命令不会返回。鉴于这些信息,我用以下代码替换了我的代码:
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();
这将运行 CMD.exe 并发出start /wait mstsc.exe
命令。如果这结束了,CMD 过程也结束了,我很好(有一个讨厌的解决方法,但没关系)。不幸的是,这不会发生。CMD 进程立即终止。有人知道我做错了什么吗?