Открыть приложение Windows Apps по ссылке

Собственно, вопрос в теме: как открыть ссылку внутри приложения, которое располагается в директории WindowsApps? Предложенные поисковиком ответы только ещё больше запутали.


Ответы (1 шт):

Автор решения: EvgeniyZ

По сути, есть 2 способа запуска:

  1. Уникальная ссылка:
    Суть в том, что почти все (а может и все) приложения регистрируют в системе свою уникальную ссылку формата name://, открыв ее откроется и самое приложение.

    • Идем в реестр по пути HKEY_CLASSES_ROOT\Extensions\ContractId\Windows.Protocol\PackageId\(уникальный id)\ActivatableClassId\(уникальный id)\CustomProperties
    • Смотрим значение Name
    • Пробуем открыть, например у Яндекс.Музыка будет yandexmusic://
  2. По уникальному идентификатору:
    Честно, я без понятия, где лучше его искать, в реестре каша, а вот виртуальная папка 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, в открывшейся папке найти нужное приложение - ПКМ - создать ярлык, на рабочем столе заходим в свойства ярлыка и там будет идентификатор, через него и запускайте, сам он воде уникальный и не меняется при обновлениях.

→ Ссылка