Как узнать, что приложение магазина windows завершилось на C# или VB?
Я знаю, что приложения Магазина Windows выполняются в изолированном режиме (Песочница). Поэтому я запускаю приложение (например, Microsoft Photos) с помощью
IApplicationActivationManager.ActivateForFile
, предоставленное изображение отображается, и возвращаемое значение функции дает мне идентификатор процесса (например, 6544 для процесса с именем "ApplicationFrameHost’ и заголовок главного окна "фотографии". Но когда я регистрирую обработчика в .Exited()
событие соответствующего процесса я не получу информацию, когда закрою приложение (в отличие от приложения Win32/64, такого как notepad.exe). Кроме того, я получаю один и тот же идентификатор процесса для следующего изображения, которое будет отображаться, – оба изображения теперь хранятся одним и тем же процессом. И все изображения, отображаемые впоследствии, возвращают тот же самый идентификатор процесса... и мой
.Exited
-Обработчик все еще не вызывается, ни в том случае, если я закрываю только одно из нескольких запущенных сейчас фото-приложений, ни после того, как окончательно закрыл их все. Любой намек, чтобы обойти это, был бы очень признателен!
Что я уже пробовал:
Поскольку я не мог выдать уведомление о том, что мой процесс изображения был закрыт, я подумал о том, чтобы посмотреть, есть ли он все еще на дисплее. Я исследовал все имущество, принадлежащее
Process
в том числе и ProcessThreadCollection
и ProcessStartInfo
но не нашел ничего, чтобы идентифицировать мои отображаемые изображения. И даже когда я исследую MainWindowsTitles, проходя через открытые окна (с помощью User32.EnumWindows()
или WindowsInterop.GetRootWindowsOfProcess(p.Id)
это не дает мне больше, чем в пять раз “фотографии” для отображаемых изображений FIFe – увы, без имен файлов отображаемых изображений!
Gerry Schmitz
Я думаю, вы обнаружите, что то, что "вы" хотите, - это доступ к услугам, которые потребуют явного предоставления разрешения "пользователем", чего, вероятно, не произойдет. Если вам придется объявить, что вы собираетесь делать, вы, вероятно, даже не пройдете сертификацию.
\\Coders\Rob
@Джерри: спасибо за ваш ответ! Просто чтобы уточнить: я пишу настольное приложение Windows для обработки пользовательских документов. По запросу пользователя я копирую файл из сети на его рабочий стол и открываю его в соответствующем приложении (Word, Excel, pdf, Photos). Когда пользователь прекращает редактирование/закрывает приложение, я хочу скопировать его изменения обратно в сетевой магазин. Поэтому мне нужно знать, когда он закончит использовать файл. Это прекрасно работает для зарегистрированных приложений, но не для приложений Магазина Windows!
RmcbainTheThird
Как вы справляетесь с проблемой, когда два разных человека работают над своей локальной копией файла более или менее одновременно? Тот, кто когда-либо сохраняет первым, потеряет свои изменения, когда другой человек сохранит свою копию.