Размещенные приложения в Windows App SDK

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

Как работают размещенные приложения

Главное приложение объявляет в своём манифесте расширение HostRuntime, тем самым делая его исполняемый файл доступным для других пакетов. Размещенное приложение объявляет зависимость от этого узла и указывает, какое содержимое следует запустить. Когда пользователь запускает размещенное приложение, Windows запускает исполняемый файл узла и передает содержимое размещенного приложения в качестве контекста.

Эта модель полезна для:

  • Скриптовые движки — хост предоставляет среду выполнения (например, Python, Node.js), а приложения, работающие в ней, — это отдельные скрипты или приложения.
  • Игровые движки — хост предоставляет игровой движок, а размещённые приложения представляют собой отдельные игры.
  • Фреймворки приложений — хост предоставляет среду выполнения фреймворка, а размещённые приложения представляют собой контент, который выполняется на нём.

Important

И для главных, и для размещённых приложений требуется идентификатор пакета MSIX. Размещенное приложение является подписанным пакетом MSIX, но его исполняемый файл поступает из узла.

Объявите среду выполнения хоста

В Package.appxmanifest хост-приложения добавьте расширение HostRuntime:

<Package xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10" ...>
  <Applications>
    <Application Id="App" Executable="MyHost.exe" EntryPoint="...">
      <Extensions>
        <uap10:Extension Category="windows.hostRuntime">
          <uap10:HostRuntime Id="MyHostRuntime" />
        </uap10:Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

Значение Id — это то, на что ссылаются размещённые приложения, чтобы объявить свою зависимость.

Объявите размещённое приложение

В манифесте размещённого приложения объявите зависимость от среды выполнения хоста и укажите TrustLevel и RuntimeBehavior:

<Package xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10" ...>
  <Dependencies>
    <uap10:HostRuntimeDependency Name="HostAppPackageFamilyName"
                                  Publisher="CN=HostPublisher"
                                  MinVersion="1.0.0.0" />
  </Dependencies>
  <Applications>
    <Application Id="App"
                 uap10:HostId="MyHostRuntime"
                 uap10:Parameters="&quot;script.py&quot;">
    </Application>
  </Applications>
</Package>

Ключевые атрибуты:

Атрибут Description
HostRuntimeDependency.Name Имя семейства пакетов ведущего приложения
HostId Соответствует HostRuntime.Id в главном приложении
Parameters Аргументы командной строки, передаваемые исполняемому файлу хоста

Создать пакет размещаемого приложения

Чтобы создать пакет размещённого приложения:

  1. Создайте стандартный проект MSIX или используйте MakeAppx.exe.
  2. Включите только файлы содержимого (скрипты, ресурсы, конфигурацию).
  3. Не включайте исполняемый файл — он предоставляется хостом.
  4. Объявите HostRuntimeDependency в манифесте.
  5. Подпишите пакет с помощью доверенного сертификата для промышленной эксплуатации. Во время разработки можно зарегистрировать пакет без подписи (см. ниже).

Регистрация неподписанных пакетов (разработка)

В процессе разработки можно зарегистрировать неподписанный пакет размещаемого приложения:

Add-AppxPackage -Path "HostedApp.msix" -AllowUnsigned

Note

Регистрация неподписанных пакетов предназначена только для разработки. Для промышленной эксплуатации подпишите пакет доверенным сертификатом.

Пример: хост скриптов Python

Приложение среды выполнения Python может служить хостом:

  1. Хост-приложение — упаковывает python.exe и объявляет HostRuntime Id="PythonHost".
  2. Размещённое приложение — содержит скрипт Python (app.py) и объявляет HostId="PythonHost" с помощью Parameters="app.py".
  3. Когда пользователь запускает размещаемое приложение, Windows запускает python.exe app.py хост-приложения, используя каталог пакета размещаемого приложения в качестве рабочего каталога.