Поделиться через


Использование 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 означает Microsoft Dynamic Dependencies.

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

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

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

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

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

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

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

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

Этот 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 App)

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

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

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

Ссылка и использование основного пакета (ограничение Windows App SDK)

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

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

Ссылка на пакет фреймворка Windows App SDK (ограничение Windows App SDK)

В непакетированном приложении вы не можете использовать динамический API зависимости пакета SDK для Приложений Windows для ссылки на пакет SDK для Приложений Windows (как вы можете ссылаться на другие пакеты MSIX с ним). Вместо этого необходимо использовать API загрузчика , предоставляемый пакетом SDK для приложений Windows. API Bootstrapper — это специализированная форма динамического API зависимостей, предназначенная для работы с зависимостями в пакете платформы Windows App SDK. Дополнительные сведения см. в статье Использование среды выполнения Windows App SDK для приложений, упакованных с внешним расположением, или неупакованных.

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