Иногда Process.WaitForExit () явно не ждет. Возьмите следующий C# фрагмент кода (который работает с повышенными правами):
// Prepare the process to run
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = @"C:\WINDOWS\system32\mmc.exe"; // WaitForExit does not wait
start.FileName = @"C:\WINDOWS\system32\notepad.exe"; // WaitForExit waits
start.FileName = @"C:\WINDOWS\system32\regedit.exe"; // WaitForExit waits
start.UseShellExecute = false;
// Fire off the process
var process = Process.Start(start);
int exitCode = 0;
process.WaitForExit();
exitCode = process.ExitCode;
Конечно, только один из параметров start.Filename будет присутствовать одновременно. (Остальные только что прокомментировали.)
Когда присутствует только mm c .exe, Process.WaitForExit () не ждет. Когда вместо них присутствуют другие два, Process.WaitForExit () ожидает.
Итак, два вопроса. Почему Process.WaitForExit () не ожидает mm c .exe, и есть ли способ заставить его ждать? (FWIW, определяющий start.CreateNoWindow = true, не имеет значения.)