Я разрабатываю приложение, которое открывает файл со связанным приложением для расширения файла (эта часть предоставляется shellexecute), и ожидаю его выхода, а затем продолжаю работу над файлом.Я знаю, что Process.Start (...) может возвращать ноль, например, если есть процесс с таким же рабочим процессом и т. Д. Я решил это, попросив пользователя закрыть все окна приложения по умолчанию, прежде чем продолжить.Я получаю связанный путь .exe из FindExecutable (...), импортированный из shell32.dll, а затем вызываю в цикле это, а также проверяю, равна ли длина списка 0.
var processList = new List<Process>(Process.GetProcessesByName(Path.GetFileNameWithoutExtension(defaultExecutablePath)));
И здесь я встретилстена, которую я не могу преодолеть.Если приложением по умолчанию является приложение любого типа от Microsoft (Edge, Photos, Movies), FindExecutable (...) возвращает пустую строку.Однако Process.Start (...) каким-то образом запускает правильное приложение по умолчанию, например, Microsoft Edge (для .pdf), но возвращает ноль, даже если не запущен экземпляр Microsoft Edge, поэтому я не могу дождаться вновь созданного процессавыходить.Все работает хорошо, за исключением случая, когда приложение предоставлено Microsoft.
var newProcess = Process.Start(openPath);
if(newProcess == null)
{
throw new ProcessStartNullException();
}else
{
newProcess.WaitForExit();
}
Могу ли я как-то использовать его или изменить дизайн в ожидании выхода?