Задание 1g. Создание образа розничной торговли

Мы подробно рассмотрим шаги, необходимые для создания розничного образа Windows IoT Базовая и его перенос на определенное аппаратное устройство.

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

Убедитесь, что вы создали базовый образ из раздела Создание базового образа, а также выполнили все предыдущие задания.

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

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

Изменение файлов конфигурации проекта

Выполните следующие действия, чтобы добавить все пользовательские приложения или пакеты подготовки, которые вы хотите добавить в образ розничной торговли.

  1. Чтобы добавить пользовательское приложение, следуйте инструкциям, приведенным в разделе Добавление приложения в изображение. Однако при выполнении Test команды Add-IoTProductFeature следует указать Retail вместо , как показано ниже:
Add-IoTProductFeature ProductX Retail APPX_HELLOWORLDAPP -OEM
or addfid ProductX Retail APPX_HELLOWORLDAPP -OEM

Это добавит FeatureID с именем APPX_HELLOWORLDAPP в XML-файл розничного OEMInput указанного продукта.

  1. Сведите к минимуму включенные функции Windows IoT Core. Вы также хотите удалить все тестовые приложения, которые включены (по умолчанию) с тестовыми образами для Windows IoT Базовая. Сюда входит приложение IoT Core по умолчанию, а также любые другие средства разработчика или функции тестирования. Это можно сделать с помощью команды Remove-IoTProductFeature:
Remove-IoTProductFeature ProductX Test IOT_BERTHA
or removefid ProductX Test IOT_BERTHA

Правильное подписывание и включение приложений

Если у вас есть одно или несколько пользовательских приложений, которые вы хотите включить в образ Windows IoT Core для розничной торговли, необходимо убедиться, что эти приложения подписаны правильно при включении их в образ розничной торговли. Выполните следующие действия для каждого приложения, которое вы хотите включить в образ. Обратите внимание, что вы можете пропустить шаги 8 и 9, если у вас есть только одно приложение для включения.

  1. Установите сертификат для подписи кода для розничной торговли на компьютере технического специалиста.

  2. Откройте пользовательское приложение в Visual Studio и откройте файл Package.appxmanifest .

  3. Перейдите на вкладку Упаковка и нажмите кнопку Выбрать сертификат... .

Экран манифеста пакета

  1. В появившемся диалоговом окне показано, какой сертификат используется для подписывания кода. Щелкните раскрывающийся список Настройка сертификата... и выберите Выбрать из хранилища сертификатов...:

Экран

  1. При появлении запроса выберите сертификат подписи кода для розничной торговли и нажмите кнопку ОК.

  2. Сохраните проект в Visual Studio , а затем создайте пакет Appx. Обратите внимание, что при сборке этого пакета вам должен быть предложено ввести пароль для сертификата подписи кода в розничной продаже.

  3. После сборки файла Appx выполните следующую команду в среде PowerShell IoT Core:

Add-IoTAppxPackage "C:\Dev\OpenSource\ContosoApp\ContosoApp\AppPackages\ContosoApp_1.0.0.0_ARM_Debug_Test\ContosoApp_1.0.0.0_ARM_Debug.appx" fga Appx.ContosoApp
 (or) newAppxPkg "C:\Dev\OpenSource\ContosoApp\ContosoApp\AppPackages\ContosoApp_1.0.0.0_ARM_Debug_Test\ContosoApp_1.0.0.0_ARM_Debug.appx" fga Appx.ContosoApp

Создание файлов образов розничной торговли

После правильной подписи всех пакетов пользовательских приложений мы можем создать образ Windows IoT Базовая для розничной торговли. Прежде чем выполнять следующие действия, убедитесь, что на компьютере установлен сертификат подписи кода для розничной торговли.

  1. Задайте подпись Интернета вещей, чтобы включить сведения о сертификате и перекрестном сертификате. Для этого необходимо изменить файл, расположенный IoTWorkspace.xml в рабочей области (например, C:\MyWorkspace):
<!--Specify the retail signing certificate details, Format given below -->
<RetailSignToolParam>/s my /sha1 "thumbprint" /fd SHA256 /ac "c:\DownloadedCrossCert.crt"</RetailSignToolParam>
  1. Запустите среду PowerShell IoT Core от имени администратора.

  2. Настройка среды для подписывания в розничной торговле. Это делается с помощью Set-IoTRetailSign:

Set-IoTRetailSign On
(or) retailsign on 
  1. Выполните сборку пакетов:
New-IoTCabPackage All
(or) buildpkg all 

После сборки всех файлов пакета .CAB убедитесь, что каждый из этих файлов правильно подписан с помощью розничного сертификата. Если некоторые из них по-прежнему подписаны с помощью тестовых сертификатов (обычно это происходит, если вы используете компьютер технического специалиста для создания тестовых и розничных образов), вы можете повторно подписать эти файлы с помощью redo-IoTCabSignature:

Redo-IoTCabSignature  C:\BSP.IN C:\BSP.OUT
(or) re-sign.cmd C:\BSP.IN C:\BSP.OUT 

При этом файлы .CAB из c:\BSP.IN, повторно подписываются с помощью сертификата розничной торговли и копируются в c:\BSP.OUT каталог.

  1. Если вы повторно подписали файлы .CAB из шага 5, скопируйте повторно подписанные .CAB файлы в C:\IoT\Workspaces\ContosoWS\Build\<arch>\pkgs, перезаписав существующие файлы. В нашем примере эти файлы копируются в C:\IoT\Workspaces\ContosoWS\Build\arm\pkgs.

  2. Создайте образ yoru retail, выполнив следующую команду:

New-IoTFFUImage ProductX Retail
(or)buildimage ProductX Retail 
  1. Затем можно выполнить вспышку образа розничной торговли, как описано в разделе Flash an image .

Используемые команды

Ниже приведены команды (по порядку) для создания розничного образа IoT Core. Обратите внимание, что сначала необходимо установить сертификат для подписи кода для розничной торговли, и при повторном подписании файлов .CAB может потребоваться ввести пароль сертификата.

Set-IoTRetailSign On
New-IoTCabPackage All
Redo-IoTCabSignature  C:\BSP.IN C:\BSP.OUT
xcopy C:\BSP.OUT\*.cab C:\IoT\Workspaces\ContosoWS\Build\arm\pkgs\*.cab
New-IoTFFUImage ProductX Retail

Добавление функций в конфигурацию розничной торговли

  1. Обновление файла конфигурации розничной торговли продукта с помощью Add-IoTProductFeature

    # Add application features
    Add-IoTProductFeature ProductA Test APPX_MYUWPAPP -OEM
    Remove-IoTProductFeature ProductA Test IOT_BERTHA
    # Add registry and file features
    Add-IoTProductFeature ProductA Retail FILES_CONFIGS -OEM
    Add-IoTProductFeature ProductA Retail REGISTRY_SETTINGS -OEM
    # Add provisioning feature
    Add-IoTProductFeature ProductA Retail PROV_WIFISETTINGS -OEM
    # Add driver
    Add-IoTProductFeature ProductA Retail DRIVERS_HELLOBLINKY -OEM
    

Проверка образа розничной торговли

Пользователь может легко проверить пользовательский тестовый образ для Windows IoT Базовая, просто включив устройство с изображением, мигаемым на устройстве. После запуска устройства можно выполнить различные проверки, чтобы убедиться, что устройство действительно работает. Простота выполнения этих тестов зависит от уровня факторов безопасности, встроенных в образ. Так как в тестовом образе нет встроенных протоколов безопасности, вы можете использовать все доступные средства разработки для тестирования устройства Интернета вещей.

Задача тестирования становится сложнее для пользовательского образа розничной торговли для Windows IoT Базовая, так как вы можете включить протоколы безопасности в состав образа, установленного на устройстве. Из-за характера этих протоколов безопасности вы не сможете использовать доступные средства тестирования для проверки устройства, поэтому может потребоваться написать тестовое приложение, которое может выполняться на устройстве Интернета вещей. Затем это приложение будет выполнять проверочные тесты различных областей и функций устройства Интернета вещей.

Тестирование пользовательского образа розничной торговли для Windows IoT Базовая можно выполнить одним из следующих способов:

Чистый образ розничной торговли

Если вы действительно хотите иметь чистый образ розничной торговли, вам потребуется создать два образа розничной торговли для вашего устройства. Эти два образа будут идентичными, за исключением того, что один образ будет включать в себя тестовое приложение (настроенное как приложение переднего плана), а другой — нет. Вы загрузите первое изображение (с включенным тестовое приложение) и выполните тестовые проверки на устройстве Интернета вещей. После проверки вы можете повторно запустить устройство Интернета вещей, используя второй "чистый" образ розничной торговли для распространения.

Плюсы: Окончательный образ розничной торговли будет полностью чистым, и только элементы, которые считаются необходимыми включены в изображение.

Недостатки. Включение тестового приложения в образ розничной торговли может привести к некоторым потенциальным проблемам с пакетами подготовки, а также к ошибкам пользователей в тестовом приложении. Это сделает этот образ розничной торговли отличается от конечного образа розничной торговли.

One-Time сквозной тест

Создается только один окончательный образ розничной торговли, который также будет включать тестовое приложение. Вы бы настроили образ таким образом, чтобы после запуска встроенного приложения (OOBE) тестовое приложение запускалось (в качестве приложения переднего плана). Условный оператор в тестовом приложении будет активирован, чтобы приложение знало, что оно выполнялось один раз раньше (что предотвращает его запуск после первого включения устройства).

// Declare variable
Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
    
// Set variable as boolean, numbers, or string values as needed at approperiate location within the test app
localSettings.Values["appRanOnce"] = false;    

// Read variable and verify value to check and apply logic
Object value = localSettings.Values["appRanOnce"];

Примечание

Для достижения наилучших результатов используйте localSettings только для хранения переменных, чтобы сохранить значение параметров. Существует вероятность нежелательных результатов от использования roamingSettings функций. localSettings может содержать только 64 КБ данных на момент написания этой статьи. Дополнительные сведения о параметрах приложения см. здесь.

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

Итак, какие типы действий я могу предпринять?

  • Запуск другого приложения FGA
  • Изменение реестра для изменения последовательности загрузки

Запуск другого приложения FGA из тестового приложения

Если вы запускаете приложение Microsoft Store, вы можете использовать следующий фрагмент кода для запуска приложений, установленных и обновленных в Магазине. Дополнительные сведения о схемах URI можно найти здесь.

// Following will launch the Microsoft store app and navigate to the Games section
bool result = await Windows.System.Launcher.LaunchUriAsync(new Uri
    ("ms-windows-store://navigatetopage/?Id=Games"));

// Following will launch the One Note app using the package family name (PFN)
bool result = await Windows.System.Launcher.LaunchUriAsync(new Uri
    ("ms-windows-store://pdp/?PFN= Microsoft.Office.OneNote_8wekyb3d8bbwe"));

Если вы запускаете пользовательское приложение (не из Microsoft Store), вы можете использовать для AppServiceConnection запуска приложения, используя имя семейства пакетов (PFN).

Сначала необходимо зарегистрировать окончательное приложение (com.concurrency.lwinsapp) в службах приложений в системе. Необходимо изменить , Package.appxmanifest file чтобы включить следующий блок кода в <Applications> раздел манифеста.

<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="AppServiceProvider.App">
      <Extensions>
        <uap:Extension Category="windows.appService" EntryPoint="MyAppService.AppLaunchService">
          <uap3:AppService Name="com.concurrency.lwinsapp" uap4:SupportsMultipleInstances="true" />
        </uap:Extension>
      </Extensions>
      ...
</Application>

В следующем сегменте кода будет запущено пользовательское приложение:

private AppServiceConnection appLaunchService;
...
this.appLaunchService = new AppServiceConnection();
this.appLaunchService.AppServiceName = "com.concurrency.lwinsapp";
this.appLaunchService.PackageFamilyName = "f3a114f7-e099-4773-8c93-77abcba14f62_004hcn5rxyy0y";
var status = await this.appLaunchService.OpenAsync();

Объединяя логику между localSettings и AppServiceConnection, можно обойти тестовое приложение при каждой загрузке устройства. По сути, тестовое приложение будет выполняться при каждой загрузке, но "сквозное" для конечного приложения при загрузке. При необходимости можно настроить логику таким образом, чтобы устройство не продолжало работу с конечным приложением в случае сбоя тестового приложения. Это может быть полезно, если необходимо убедиться, что устройство полностью протестировано и работает при каждой загрузке.

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

Недостатки: тестовое приложение входит в образ розничной торговли. Существует вероятность того, что в вашем приложении есть бреши в системе безопасности. При необходимости убедитесь, что тестовое приложение заблокировано. Из-за характера тестового приложения вы можете изменять функции устройства.

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