Задание 1b. Добавление приложения в образ

Теперь мы собираемся взять приложение (например, приложение IoT Core по умолчанию ), упаковать его и создать новый образ Windows IoT Core, который можно загрузить на устройство.

Примечание

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

Предварительные требования и требования

Примечание

По мере прохождения этого руководства по производству projectA начнет напоминать образ SampleA, который находится в папке C:\IoT-ADK-AddonKit\Source-arm\Products\SampleA.

Мы будем использовать образ ProjectA, созданный в лаборатории 1a: создание базового образа.

Для работы с этим разделом вам также потребуются следующие средства:

  • Visual Studio
  • Комплект средств для развертывания и оценки Windows (Windows ADK)
  • Основные пакеты Windows IoT
  • IoT Core ADK Add-Ons
  • Среда PowerShell IoT Core
  • Текстовый редактор, например Блокнот или VS Code

Поддерживаемые типы приложений

Приложения универсальной платформы Windows (UWP)

IoT Core — это ос, ориентированная на UWP, а приложения UWP — это основной тип приложения.

универсальная платформа Windows (UWP) — это общая платформа приложений во всех версиях Windows 10, включая Windows 10 IoT Базовая. UWP — это эволюция среда выполнения Windows (WinRT). Дополнительные сведения и общие сведения о UWP можно найти здесь.

Традиционные приложения UWP

Приложения UWP работают только в IoT Core, как и в других выпусках Windows 10. Простое пустое приложение Xaml в Visual Studio будет правильно развернуто на устройстве IoT Core так же, как на телефоне или компьютере с Windows 10. Все стандартные языки UWP и шаблоны проектов полностью поддерживаются в IoT Core.

Существует несколько дополнений к традиционной модели приложений UWP для поддержки сценариев Интернета вещей, и любое приложение UWP, которое использует их, потребуется добавить соответствующие сведения в их манифест. В частности, пространство имен "iot" необходимо добавить в манифест этих стандартных приложений UWP.

Внутри атрибута манифеста необходимо определить iot xmlns и добавить его в список IgnorableNamespaces. Окончательный XML-файл должен выглядеть следующим образом:

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
  IgnorableNamespaces="uap mp iot">

Фоновые приложения

В дополнение к традиционным приложениям пользовательского интерфейса в IoT Core добавлен новый тип приложения UWP под названием "Фоновые приложения". Эти приложения не имеют компонента пользовательского интерфейса, но вместо этого имеют класс, реализующий интерфейс IBackgroundTask. Затем они регистрируют этот класс как StartupTask для запуска при загрузке системы. Так как они по-прежнему являются приложениями UWP, они имеют доступ к одному и тому же набору API и поддерживаются на одном языке. Единственное отличие заключается в отсутствии точки входа в пользовательский интерфейс.

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

Подробные сведения см. в разделе Фоновые приложения на сайте MSDN.

Приложения, не относящиеся к UWP (Win32)

IoT Core поддерживает некоторые традиционные типы приложений Win32, такие как консольные приложения Win32 и службы NT. Эти приложения создаются и работают так же, как и в Windows 10 Desktop. Кроме того, существует шаблон консольного проекта IoT Core C++, который упрощает создание таких приложений с помощью Visual Studio.

Существует два main ограничения для этих приложений, не относящихся к UWP:

  1. Поддержка устаревшего пользовательского интерфейса Win32 отсутствует: IoT Core не содержит API для создания классических (HWND) Windows. Устаревшие методы, такие как CreateWindow() и CreateWindowEx(), а также любые другие методы, которые работают с дескрипторами Windows (HWND), недоступны. Впоследствии платформы, зависящие от таких API, включая MFC, Windows Forms и WPF, не поддерживаются в IoT Core.
  2. Только приложения C++. В настоящее время для разработки приложений Win32 в IoT Core поддерживается только C++.

Служба приложений

Службы приложений — это приложения UWP, которые могут предоставлять службы другим приложениям UWP. Это похоже на веб-службы на устройстве. Служба приложения выполняется как фоновой задачи в приложении узла и обеспечить его службы другим приложениям. Например служба приложения может предоставить службу сканер штрих-кода, которая может использовать другие приложения. Службы приложений позволяют создавать службы без пользовательского интерфейса, которые приложения могут вызывать на одном устройстве и, начиная с Windows 10 версии 1607, на удаленных устройствах. Начиная с Windows 10 версии 1607 можно создавать службы приложения, работающие в том же процессе, что и приложение узла.

Дополнительные сведения о создании фоновой службы приложений, а также использовании службы из приложений uwp (а также фоновых задач и служб) можно найти здесь.

Расширение приложения за счет служб, расширений и пакетов

В Windows 10 существует множество технологий для расширения и компонентов приложения. Эта таблица поможет вам определить, какую технологию следует использовать в зависимости от требований. Далее идет краткое описание сценариев и технологий.

Сценарий Пакет ресурсов Пакет ресурсов Дополнительный пакет Плоский пакет Расширение приложения Служба приложений Потоковая установка
Сторонние подключаемые модули кода ✔️
Подключаемые модули кода в процессе ✔️
Ресурсы по взаимодействию с пользователем (строки и изображения) ✔️ ✔️ ✔️ ✔️ ✔️
Содержимое по запросу
(например, дополнительные уровни)
✔️ ✔️ ✔️
Отдельные лицензирования и приобретения ✔️ ✔️ ✔️
Покупка в приложении ✔️ ✔️
Оптимизация времени установки ✔️ ✔️ ✔️ ✔️
Уменьшение используемого места на диске ✔️ ✔️
Оптимизация упаковки ✔️ ✔️ ✔️
Ускорение публикации ✔️ ✔️ ✔️ ✔️

Создание пакета appx

Первым шагом является создание приложения универсальная платформа Windows (UWP), которое будет выполняться на устройстве Интернета вещей. Этот раздел можно пропустить, если вы уже создали и протестировали приложение UWP.

  1. Создайте приложение UWP. Это может быть любое приложение, предназначенное для IoT Core, сохраненное в виде пакета Appx. В нашем примере мы используем приложение IoT Core по умолчанию .

  2. В Visual Studio сохраните приложение в виде пакета Appx. Для этого щелкните Project > Store > Создать пакеты приложений>Я хочу создать пакеты для загрузки неопубликованных>приложений Далее.

  3. Выберите Выходное расположение как C:\DefaultApp (или любой другой путь, не включающий пробелы).

  4. Выберите Создать пакет приложений: Никогда.

  5. Нажмите кнопку Создать.

Снимок экрана: окно пакетов приложений

Visual Studio создает файлы Appx в вашем расположении для выбранных архитектур (Arm, x86, x64). В нашем примере это файл: C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test

  1. Необязательно. Протестируйте приложение. Обратите внимание, что вы, возможно, уже протестировали приложение в процессе сборки проекта.

Упаковка Appx

Следующим шагом является упаковка файла Appx, который позволит настроить его и выполнить сборку с помощью Windows ADK (при сборке образа FFU).

  1. Откройте IoTCorePShell.cmd. Он должен предложить вам запуститься от имени администратора.

  2. Создайте пакет для Appx с помощью команд-приложений New-IoTAppxPackage. Замените расположение пути к файлу и имя пакета своим пакетом Appx. В нашем примере команда выглядит следующим образом:

    Add-IoTAppxPackage "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp
    
    (or) newappxpkg "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp
    

    Примечание

    Параметр fga указывает, что файл Appx является приложением переднего плана. Если вы укажете пакет в качестве фонового приложения (с параметром bga) и не имеете других приложений переднего плана на изображении, система зависнет при загрузке (отображает спиннер на неопределенный срок).

    При этом создается новая папка по адресу C:\MyWorkspace\Source-<arch>\Packages\Appx.MyUWPApp, копируются файлы appx и их зависимости, а также создается файл customizations.xml, а также XML-файл пакета, который используется для сборки пакета.

    Имейте в виду, что если у appx есть зависимости, вам потребуется, чтобы подкаталог Dependencies присутствовал в том же расположении, что и appx при выполнении этой команды. Если не включить этот параметр, при сборке образа FFU будут возникать ошибки.

    Кроме того, в файл добавляется C:\MyWorkspace\Source-<arch>\Packages\OEMFM.xmlAPPX_MYUWPAPP FeatureID.

  3. В среде оболочки IoT Core теперь можно встроить пакет в файл .CAB, используя New-IoTCabPackage.

    New-IoTCabPackage Appx.MyUWPApp
    (or) buildpkg Appx.MyUWPApp
    

    При этом пакет будет создан в файл .CAB в разделе C:\MyWorkspace\Build\<arch>\pkgs\<oemname>.Appx.MyUWPApp.cab.

Обновление файлов конфигурации проекта

Теперь вы можете обновить файлы конфигурации проекта, чтобы включить приложение в образ FFU.

  1. Добавьте FeatureID для пакета приложения с помощью add-IoTProductFeature:

    Add-IoTProductFeature ProductA Test APPX_MYUWPAPP -OEM
    (or) addfid ProductA Test APPX_MYUWPAPP -OEM
    

    При этом идентификатор featureID с именем APPX_HELLOWOLRDAPP добавляется в XML-файлC:\IoT\Workspaces\ContosoWS\Source-arm\<product name>\TestOEMInput.xml (файл) test OEMInput указанного продукта.

  2. Удаление примеров тестовых приложений IOT_BERTHA с помощью Remove-IoTProductFeature

    Remove-IoTProductFeature ProductA Test IOT_BERTHA
    (or) removefid ProductA Test IOT_BERTHA
    

Создание и тестирование образа

В среде PowerShell IoT Core подготовьте среду для создания продуктов, создав все пакеты в рабочих папках (с помощью Командлета New-IoTCabPackage):

New-IoTCabPackage All
(or) buildpkg all

Создайте образ FFU еще раз, как указано в разделе Lab 1a: Create a basic image ( Создание базового образа). Можно использовать приведенную ниже команду.

New-IoTFFUImage ProductX Test
(or)buildimage ProductX Test 

После сборки файла FFU (теперь он должен включать ваше приложение), вы можете выполнить его на аппаратном устройстве, как указано в лаборатории 1a.

Дополнительные сведения об установке appx-файла на устройстве Интернета вещей см. в документации по установке приложения .

Обновление приложений на устройствах IoT Core

Дальнейшие действия

Задание 1c. Добавление файла и параметра реестра в образ