Использование API динамической зависимости для ссылки на пакеты MSIX во время выполнения

Две реализации

Существует две реализации API динамической зависимости, которые можно выбрать в зависимости от целевой платформы и сценария:

  • API динамической зависимости пакета SDK для приложений Windows. Пакет SDK для приложений Windows предоставляет функции C и C++ (в msixdynamicdependency.h) и типы среда выполнения Windows (WinRT) (в пространстве имен Microsoft.Windows.ApplicationModel.DynamicDependency), реализующие API динамической зависимости. Эту реализацию API можно использовать в любой версии Windows, поддерживающей пакет SDK для приложений Windows.
  • API динамической зависимости Windows 11. Windows 11 также предоставляет функции C и C++, реализующие API динамических зависимостей (в файле appmodel.h). Эта реализация API может использоваться только приложениями, предназначенными для Windows 11 версии 22H2 (10.0; Сборка 22621) и более поздние версии.

См. также различия между двумя реализациями.

Примечание.

Как видно из этой статьи, для API-интерфейсов Windows App SDK (C/C++) используются те же имена, что и для API-интерфейсов Windows 11 (C/C++), с дополнительным префиксом Mdd. Mdd расшифровывается как динамические зависимости Майкрософт.

Существуют различные типы пакетов MSIX, включая платформу, ресурс, необязательные и основные пакеты. API динамической зависимости позволяет распаковывать приложения для ссылки и использовать пакеты платформы , такие как WinUI 2 и среда выполнения DirectX. Дополнительные сведения о зависимостях пакетов платформы см. в разделе "Пакеты платформы MSIX" и динамические зависимости.

В частности, API динамической зависимости предоставляет способы управления ссылками во время установки и ссылками во время выполнения для пакетов MSIX. Дополнительные сведения см. в разделе "Модель обслуживания" для пакетов платформы.

Использование API динамических зависимостей

Чтобы использовать API динамической зависимости в распаковке приложения для получения зависимости от пакета MSIX, следуйте этому общему шаблону в коде:

1. Создание ссылки времени установки

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

Указанные критерии включают имя семейства пакетов, минимальную версию и архитектуры; но не удается указать конкретный пакет MSIX. При добавлении ссылки во время выполнения в пакет MSIX API выбирает самую высокую версию, удовлетворяющую указанным критериям.

Необходимо также задать артефакт срока действия, который может быть текущим процессом, файлом или ключом реестра Windows, который указывает системе, что приложение по-прежнему доступно. Если указанный артефакт больше не существует, ос может предположить, что зависимость больше не нужна, и она может удалить пакет MSIX, если другие приложения не объявили о ней зависимость. Такая функция полезна для сценариев, в которых приложение не удаляет PIN-код времени установки при удалении.

Этот API возвращает идентификатор зависимости, с помощью которого в других вызовах должны создаваться ссылки времени выполнения и удаляться ссылки времени установки.

2. Добавление ссылки времени выполнения

Если приложению нужно использовать пакет MSIX, вызовите одну из следующих функций или методов, чтобы запросить доступ к указанному пакету MSIX и добавить ссылку на время выполнения. Вызов этого API сообщает ОС о том, что пакет MSIX активно используется, и для обработки обновлений версий параллельно (эффективно отложенное удаление или обслуживание более старой версии до тех пор, пока приложение не будет готово к использованию). В случае успешного выполнения приложение может активировать классы и использовать содержимое из пакета MSIX.

При вызове этого API необходимо передать идентификатор зависимости, возвращенный при создании ссылки на время установки, и требуемый ранг, используемый для пакета MSIX в графе пакетов процесса. Этот API возвращает полное имя пакета MSIX, на который ссылается ссылка, и дескриптор, используемый для отслеживания зависимости активного использования. Если установлено несколько пакетов MSIX, которые соответствуют условиям, заданным при создании ссылки на время установки, API выбирает самую высокую версию, удовлетворяющую критериям.

3. Удаление ссылки времени выполнения

Когда приложение будет готово с помощью пакета MSIX, вызовите одну из следующих функций или методов, чтобы удалить ссылку во время выполнения. Как правило, приложение вызывает этот API во время завершения работы. Этот API сообщает ОС, что он безопасно удаляет любые ненужные версии пакета MSIX.

При вызове этого API необходимо передать дескриптор, возвращенный при добавлении ссылки времени выполнения.

4. Удаление ссылки времени установки

Когда приложение будет удалено, вызовите одну из указанных ниже функций или методов, чтобы удалить ссылку времени установки. Этот API сообщает ОС, что он безопасно удалить пакет MSIX, если от него не зависят другие приложения.

При вызове этого API необходимо передать идентификатор зависимости, возвращенный при создании ссылки времени установки.

Различия между двумя реализациями

Потребность в диспетчере времени существования (ограничение пакета SDK для приложений Windows)

При использовании динамического API зависимостей пакета SDK для приложений Windows для получения зависимости от пакета MSIX API требуется помощь с помощью другого установленного пакета и выполнения процесса, чтобы сообщить Windows о том, что пакет MSIX используется, а также блокировать обслуживание платформы во время его использования. Этот компонент называется диспетчером времени существования.

Для своего пакета платформы Windows App SDK предоставляет компонент диспетчера срока действия, который называется диспетчером срока действия динамической зависимости (DDLM). Однако другие пакеты платформы в настоящее время не предоставляют аналогичный компонент диспетчера срока действия от корпорации Майкрософт.

Api динамической зависимости Windows 11 не имеет этого ограничения.

Справочник и использование основного пакета (ограничение пакета SDK для приложений Windows)

Динамическая зависимость всегда может ориентироваться на пакет платформы . Но только API динамической зависимости Windows 11 может ссылаться и использовать основные пакеты.

Основной пакет должен правильно настроить исходный файл манифеста пакета приложения ( Package.appxmanifest файл в Visual Studio). В частности, основной пакет (целевой объект, а не вызывающий объект) должен быть задан <uap15:DependencyTarget>true</> (см . uap15:DependencyTarget). Поэтому цель <uap15::DependencyTarget> состоит в том, чтобы включить динамическую зависимость для целевого пакета . Другими словами, основной пакет должен отказаться от использования в качестве динамической зависимости (в то время как пакеты платформы всегда неявно разрешают это).

Ссылка на пакет пакета sdk для приложений Windows (ограничение пакета SDK для приложений Для Windows)

В распаковке приложения нельзя использовать динамический API зависимостей пакета SDK для приложений Windows для ссылки на пакет пакета SDK для приложений Windows (например, вы можете ссылаться на другие пакеты MSIX с ним). Вместо этого необходимо использовать API загрузчика, предоставляемый пакетом SDK для приложений Windows. API начальной загрузки — это специализированная форма ДИНАМИЧЕСКОго API зависимостей, предназначенная для принятия зависимостей в пакете платформы windows App SDK. Дополнительные сведения см. в разделе "Использование среды выполнения пакета SDK для приложений Windows", упакованных с внешним расположением или распаковкой.

Api динамической зависимости Windows 11 не имеет этого ограничения.