Как узнать, какое приложение (процесс) было выбрано для открытия файла (Process.Start)? - PullRequest
0 голосов
/ 07 июня 2018

У меня есть это превосходное приложение WPF, где пользователи, помимо прочего, загружают файлы, которые затем сохраняются в базе данных ( требование ).В любое время пользователь, запускающий это приложение, может щелкнуть гиперссылку на файл, чтобы открыть файл на своем локальном компьютере.Для этого я просто использую:

var process = Process.Start(tempPath);

Я десериализирую байты, хранящиеся в базе данных, и записываю временный файл в определенную папку.Еще одно требование состояло в том, что если пользователь вносит какие-либо изменения во временный файл, он может просто щелкнуть «Сохранить» в любом используемом приложении, после чего файл должен автоматически сохраниться в базе данных.Я использую FileSystemWatcher , чтобы узнать, был ли изменен временный файл, и следующее для отслеживания процесса:

await process.WaitForExitAsync(async () =>
{
    if(!wasModified) return;

    this.SetBusy();
    var path = _workDocumentsOpened[work.Id];
    _workDocumentsOpened.Remove(work.Id);
    await work.SetDocumentAsync(path, work.DocumentFileName);
    File.Delete(path);
    this.SetNotBusy();
});

Это работает нормально большую часть времени.Однако, поскольку нет ограничений на тип файла (расширение), который пользователь может загрузить, если пользователь загружает файл и не настроил для него приложение по умолчанию, то отображается следующее диалоговое окно Windows:

enter image description here

Проблема заключается в том, что к этому времени Process.Start вернул null = (и до сих пор я не смогвыяснить, как определить, какой процесс выбран пользователем для открытия файла или операция просто отменена.

Любая помощь приветствуется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...