Открыть приложение Windows Apps по ссылке
Собственно, вопрос в теме: как открыть ссылку внутри приложения, которое располагается в директории WindowsApps? Предложенные поисковиком ответы только ещё больше запутали.
Ответы (1 шт):
По сути, есть 2 способа запуска:
Уникальная ссылка:
Суть в том, что почти все (а может и все) приложения регистрируют в системе свою уникальную ссылку форматаname://, открыв ее откроется и самое приложение.- Идем в реестр по пути
HKEY_CLASSES_ROOT\Extensions\ContractId\Windows.Protocol\PackageId\(уникальный id)\ActivatableClassId\(уникальный id)\CustomProperties - Смотрим значение
Name - Пробуем открыть, например у Яндекс.Музыка будет
yandexmusic://
- Идем в реестр по пути
По уникальному идентификатору:
Честно, я без понятия, где лучше его искать, в реестре каша, а вот виртуальная папкаAppsFolder(открыть в проводнике можно черезshell:AppsFolder) содержит в себе все нужное сразу, программно открывать виртуальные директории весьма геморно, но для этого есть официальная библиотека от Microsoft Microsoft.WindowsAPICodePack-ShellСтавим указанный выше пакет через NuGet
Далее пишем:
var appsFolder = KnownFolderHelper.FromKnownFolderId(new("1e87508d-89c2-42f0-8a7e-645a0f50ca58"));Значение
1e87508d-89c2-42f0-8a7e-645a0f50ca58- этоGuidнужной папки, который можно посмотреть в документации.Получив доступ к директории, мы можем уже баловаться как хотим
Например, пройтись циклом и вывести имена приложений:
foreach (var app in appsFolder) { Console.WriteLine(app.Name); }Или, зная то, что Windows приложения заканчиваются на
!App, получить их всеvar winApps = appsFolder.Where(x => x.ParsingName.EndsWith("!App"))?.ToArray();Ну или найти конкретное приложение, например, по названию
var yaMusic = appsFolder.SingleOrDefault(x => x.Name == "Яндекс.Музыка");
Умея все это, мы теперь можем вытянуть нужный нам идентификатор приложения. За это отвечает свойство
ParsingName, которое и является идентификатором для создания ярлыка.Имея нужный нам идентификатор, мы можем запустить приложение, делается это очень просто:
Process.Start("explorer.exe", $@"shell:appsFolder\{yaMusic .ParsingName}");
Вот вроде 2 основных способа запуска таких приложений, выбирайте нужный и используйте. Способ с идентификатором я лишь показал для "автоматизации", вы можете его найти руками написав shell:AppsFolder, в открывшейся папке найти нужное приложение - ПКМ - создать ярлык, на рабочем столе заходим в свойства ярлыка и там будет идентификатор, через него и запускайте, сам он воде уникальный и не меняется при обновлениях.