Есть ли способ в WinRT узнать, можно ли запустить файл с определенным расширением?

В настоящее время я пишу приложение для магазина Windows, где я хочу предложить возможность открывать определенный файл напрямую, если есть известное приложение для его открытия. В противном случае я хочу скрыть эту опцию.

Обычный способ открыть файл — использовать Launcher.LaunchFileAsync(IStorageFile). -Метод. Он открывает файл напрямую или предлагает список возможных приложений для открытия файла. Поэтому иногда он знает о приложениях для открытия файла, а иногда нет. Но есть ли способ узнать, установлено ли такое приложение программно или нет, чтобы я мог решить, скрывать ли кнопку открытия?


person Christoph Meißner    schedule 02.07.2014    source источник


Ответы (2)


Это не поддерживается для приложений Магазина Windows.

Общая модель заключается в том, чтобы «держать пользователя под контролем», что означает, что если нет приложения, уже доступного для сопоставления файла или URI, у него есть возможность найти его в Магазине для завершения рабочего процесса. Я считаю, что это также способствует приобретению новых приложений.

Иными словами, запуск ассоциации определяется спросом, когда пользователю предлагается найти приложения именно в тот момент, когда они ему нужны, а не отдельно искать приложения, которые каким-то образом настраивают устройство, а затем включают функции в другие приложения (например, включение определенных типов файлов).

В предлагаемой вами модели, в которой приложение, работающее с файлами, скрывает несвязанные типы файлов, спросите себя: как пользователи могут включить тип файла? То есть они могли видеть файл в своей системе с помощью проводника (или других приложений). Но в вашем приложении они не видят его в списке. Это само по себе может вызвать путаницу — я вижу в ваших обзорах комментарии, в которых говорится: «Как я могу заставить эти файлы появляться?» Ваш единственный ответ будет: «Ну, вам нужно сначала установить другое приложение, которое может обрабатывать файлы этого типа». Клиент: «Как мне найти эти приложения?» Вы: «Гм...», потому что приложение «Магазин» не дает возможности поиска по поддержке ассоциации… может быть, вам повезет с ключевыми словами.

Или, скажем, пользователь приобретает какое-то другое приложение из Магазина или десктопное приложение, а это значит, что эти файлы волшебным образом начинают появляться в вашем приложении по непонятной причине. Клиенты обязательно спросят, почему это произошло.

Короче говоря, предлагаемая вами модель потенциально может создать разрыв между тем, что находится в файловой системе, и тем, что отображается в вашем приложении, что будет трудно согласовать. Я предполагаю, что в ходе работы с этим отключением вы в конечном итоге должны были создать пользовательский интерфейс, в котором вы показываете несвязанные типы файлов, а затем предлагаете пользователю получить приложение, которое будет их поддерживать (если бы вы могли даже запустить Магазин с такими критериями). Я не знаю наверняка, но я предполагаю, что ряд настольных приложений сделали то же самое, поэтому Windows решила для приложений Магазина встроить пользовательский интерфейс непосредственно в запускаемый API.

person Kraig Brockschmidt - MSFT    schedule 09.07.2014
comment
Я понимаю, что вы хотите мне сказать, и я уже знаю об этой модели. В общих чертах использования вы правы в том, что говорите. Но, поскольку мое приложение является бизнес-приложением, его следует продавать и развертывать только с помощью магазина Windows, и во время использования у него нет доступа к Интернет. Таким образом, пользователь не сможет получить новое приложение. Кроме того, если пользователь подключает устройство к Интернету, это будет незаконным с точки зрения политики компании. Кроме того, будут проблемы с безопасностью, когда пользователь открывает файл, который он не должен открывать. В этих условиях использования такая функция была бы действительно полезной. - person Christoph Meißner; 10.07.2014
comment
Не могли бы вы разъяснить мне природу LOB? Вы говорите, что он будет продаваться и развертываться через Магазин, а не загружаться отдельно? Потому что, если вы выполняете неопубликованную загрузку, вы можете использовать компонент WinRT через посредника, чтобы получить доступ к API-интерфейсам реестра для этой цели. - person Kraig Brockschmidt - MSFT; 11.07.2014
comment
Поскольку приложение должно быть развернуто в магазине И через неопубликованную загрузку на устройства клиентов, и мы не хотим поддерживать разные его версии, мы решили пойти обычным путем, чтобы держать пользователя под контролем. Так что ты прав! Спасибо. - person Christoph Meißner; 10.10.2014

Я не знаю о нативных методах RT для получения таких данных, но windows-runtime тем не менее все еще Windows. Таким образом, вы можете получить доступ к реестру . И вся необходимая информация, чтобы определить, имеет ли тип файла связанное приложение, содержится в реестре.

Принимая во внимание эти два соображения, вы можете попытаться использовать этот SO thread в качестве основы для вашего разрешающего кода.

P.S.: Родные методы RT были бы гораздо лучшим решением, но, к сожалению, у меня очень мимолетный опыт работы с Win-RT. Может быть, кто-то более знающий может предложить лучшее нативное решение.

person Eugene Podskal    schedule 02.07.2014
comment
Проблема с доступом к реестру будет заключаться в том, что мое приложение не пройдет процесс сертификации магазина, как вы можете прочитать здесь. Кроме того, требуется, чтобы он работал на ARM. В этих условиях это не решение для меня. Но спасибо за эту идею. - person Christoph Meißner; 02.07.2014
comment
О, да. Извините, я только что просмотрел тег win-store. - person Eugene Podskal; 02.07.2014