Этот код работает, как ожидалось, на большом количестве машин. Однако на одной конкретной машине вызов WaitForExit() кажется проигнорированным и фактически отмечает процесс как завершенный.
static void Main(string[] args)
{
Process proc = Process.Start("notepad.exe");
Console.WriteLine(proc.HasExited); //Always False
proc.WaitForExit(); //Blocks on all but one machines
Console.WriteLine(proc.HasExited); //**See comment below
Console.ReadLine();
}
Обратите внимание, что в отличие от аналогичного вопроса на SO, вызываемый процесс notepad.exe (для целей тестирования), так что маловероятно, что с ним возникла ошибка - т.е. он не порождает второй подпроцесс и закрытие. Тем не менее, это не объяснит, почему он работает на всех других машинах.
На проблемной машине второй вызов Console.WriteLine(proc.HasExited)) возвращает true, хотя блокнот все еще явно открыт, как на экране, так и в диспетчере задач.
Аппарат работает под управлением Windows 7 и .NET 4.0.
Мой вопрос: какие условия на этой конкретной машине могут быть причиной этого? Что я должен проверять?
Изменить - все, что я пробовал до сих пор/Обновления/Возможно релевантная информация:
- Переустановил .NET.
- Закрытие любых процессов, которые я не знаю в диспетчере задач.
- Windows еще не активирована на этом компьютере.
- Следуя рекомендациям в комментариях, я попытался получить "существующий" идентификатор процесса, используя
GetProcessesByName, но просто возвращает пустой массив на проблемную машину. Поэтому трудно сказать, что проблема даже сWaitForExit, так как процесс не возвращается вызовомGetProcessesByNameеще до вызоваWaitForExit. - На проблемной машине результирующий процесс Notepad ParentID - это идентификатор процесса блокнота, который запускается вручную, или, другими словами, блокнот порождает дочерний процесс и завершает себя.