リモート マシンへのリモート デスクトップ セッションにすばやくアクセスできる管理アプリケーションも作成しました。プロセスが終了するまで待つ必要があるため、リモート サーバーへの 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 が自分自身を fork し、最初のプロセスを中止するのではないかと考えました。
ただし、(コマンドラインから) 次のコマンドを使用して、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 プロセスはただちに終了します。誰かが私が間違っていることを知っていますか?