Не могу дождаться выхода, если приложение является приложением Microsoft - PullRequest
0 голосов
/ 16 февраля 2019

Я разрабатываю приложение, которое открывает файл со связанным приложением для расширения файла (эта часть предоставляется 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();
            }

Могу ли я как-то использовать его или изменить дизайн в ожидании выхода?

1 Ответ

0 голосов
/ 16 февраля 2019

Это не потому, что они являются приложениями Microsoft, а потому, что они являются UWP, и UWP выполняется в контейнерном процессе, называемом ApplicationFrameHost, поэтому вам необходимо выяснить реальный процесс в этом ApplicationFrameHost, а затем отслеживать его.Кроме того, многие процессы приложения Win 10 UWP не завершаются сразу после того, как пользователи закрывают свое окно, поэтому они могут иметь теплый запуск вместо холодного запуска для повышения производительности.Сначала приложение будет приостановлено, а затем, если необходимо, прекратит его.Таким образом, даже если вы можете найти реальный процесс, вы не всегда можете ретранслировать его, чтобы определить, закрыто ли окно UWP или нет.

...