Laboratorio 1g: Crear una imagen comercial
Detallaremos los pasos necesarios para crear una imagen comercial de Windows IoT Core y flashelo en un dispositivo de hardware específico.
Requisitos previos y requisitos
Asegúrese de que ha creado una imagen básica a partir de Creación de una imagen básica, así como de completar todos los laboratorios anteriores.
Necesitará las siguientes herramientas instaladas para completar esta sección:
- Un certificado de firma de código comercial
- Un certificado de firma cruzada
- Visual Studio
- Windows Assessment and Deployment KiT (Windows ADK)
- Entorno de PowerShell de IoT Core
- Un editor de texto como bloc de notas o VS Code
Modificar archivos de configuración del proyecto
Siga los pasos que se indican a continuación para agregar aplicaciones personalizadas o paquetes de aprovisionamiento que quiera agregar a la imagen comercial.
- Para agregar una aplicación personalizada, debe seguir las instrucciones que aparecen en Agregar una aplicación a una imagen. Sin embargo, especificaría
Retail
en lugar deTest
al ejecutar el comando Add-IoTProductFeature , como se muestra aquí:
Add-IoTProductFeature ProductX Retail APPX_HELLOWORLDAPP -OEM
or addfid ProductX Retail APPX_HELLOWORLDAPP -OEM
Esto agrega un FeatureID denominado APPX_HELLOWORLDAPP al archivo XML retail OEMInput del producto especificado.
- Minimice las características de Windows IoT Core incluidas. También quiere quitar las aplicaciones de prueba que se incluyen (de forma predeterminada) con imágenes de prueba para Windows IoT Core. Esto incluye la aplicación predeterminada de IoT Core junto con cualquier otra herramienta de desarrollo o características de prueba. Para ello, use Remove-IoTProductFeature:
Remove-IoTProductFeature ProductX Test IOT_BERTHA
or removefid ProductX Test IOT_BERTHA
Firma correcta e inclusión de las aplicaciones
Si tiene una o varias aplicaciones personalizadas que desea incluir en la imagen comercial de Windows IoT Core, debe comprobar que estas aplicaciones se han firmado correctamente al incluirlas en la imagen comercial. Siga estos pasos para cada aplicación que quiera incluir en la imagen. Tenga en cuenta que puede omitir los pasos 8 y 9 si solo tiene una aplicación para incluir.
Instale el certificado de firma de código comercial en el equipo técnico.
Abra la aplicación personalizada en Visual Studio y abra el archivo Package.appxmanifest .
Haga clic en la pestaña Empaquetado y haga clic en el botón Elegir certificado... .
- El cuadro de diálogo que se muestra mostrará qué certificado se usa para la firma de código. Haga clic en la lista desplegable Configurar certificado... y seleccione Elegir del almacén de certificados...:
Elija el certificado de firma de código comercial cuando se le solicite y haga clic en Aceptar.
Guarde el proyecto en Visual Studio y compile el paquete Appx. Tenga en cuenta que debe solicitar su contraseña para el certificado de firma de código comercial al compilar este paquete.
Una vez compilado el archivo Appx, ejecute el siguiente comando en Entorno de PowerShell de 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
Compilación de los archivos de imagen comercial
Una vez que tengamos todos los paquetes de aplicación personalizados firmados correctamente, ahora podemos compilar la imagen comercial de Windows IoT Core. Compruebe que tiene instalado el certificado de firma de código comercial en su PC antes de seguir estos pasos:
- Establezca la firma de IoT para incluir detalles sobre el certificado y el certificado cruzado. Esto se hace modificando el archivo, ubicado en el
IoTWorkspace.xml
área de trabajo (por ejemplo, C:\MyWorkspace):
<!--Specify the retail signing certificate details, Format given below -->
<RetailSignToolParam>/s my /sha1 "thumbprint" /fd SHA256 /ac "c:\DownloadedCrossCert.crt"</RetailSignToolParam>
Ejecute el entorno de PowerShell de IoT Core como administrador.
Establezca el entorno para la firma comercial. Esto se hace con Set-IoTRetailSign:
Set-IoTRetailSign On
(or) retailsign on
- Compile los paquetes:
New-IoTCabPackage All
(or) buildpkg all
Una vez compilados todos los archivos de .CAB paquete, debe comprobar que cada uno de estos archivos está firmado correctamente con el certificado comercial. Si algunos todavía están firmados con los certificados de prueba (esto suele ocurrir si usa el equipo técnico para compilar imágenes de prueba y minoristas), puede volver a firmar estos archivos mediante la redo-IoTCabSignature:
Redo-IoTCabSignature C:\BSP.IN C:\BSP.OUT
(or) re-sign.cmd C:\BSP.IN C:\BSP.OUT
Esto toma los archivos de .CAB de c:\BSP.IN
, los vuelve a firmar con el certificado comercial y los copia en el c:\BSP.OUT
directorio.
Si vuelve a firmar los archivos de .CAB del paso 5, copie los archivos .CAB firmados de nuevo en
C:\IoT\Workspaces\ContosoWS\Build\<arch>\pkgs
, sobrescribir los archivos existentes. En nuestro ejemplo, estos archivos se copian enC:\IoT\Workspaces\ContosoWS\Build\arm\pkgs
.Compile la imagen comercial yoru ejecutando el siguiente comando:
New-IoTFFUImage ProductX Retail
(or)buildimage ProductX Retail
- A continuación, puede flashar la imagen comercial como se describe en Flash an image (Flash en una imagen).
Comandos usados
Estos son los comandos (en orden) para crear una imagen comercial de IoT Core. Tenga en cuenta que el certificado de firma de código comercial debe instalarse primero y puede solicitarle la contraseña del certificado al volver a firmar los archivos de .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
Adición de las características a la configuración comercial
Actualización del archivo de configuración comercial del producto mediante 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
Comprobación de la imagen comercial
Un usuario puede comprobar fácilmente una imagen de prueba personalizada para Windows IoT Core simplemente activando un dispositivo con la imagen parpadeada en el dispositivo. Una vez que el dispositivo se esté ejecutando, puede ejecutar varias comprobaciones para comprobar que el dispositivo es realmente funcional. La facilidad de estas pruebas depende de los niveles de factores de seguridad horneados en la imagen. Puesto que no hay protocolos de seguridad integrados en una imagen de prueba, puede usar todas las herramientas de desarrollo disponibles para probar el dispositivo IoT.
La tarea de pruebas se vuelve más difícil para una imagen comercial personalizada para Windows IoT Core, ya que puede incluir protocolos de seguridad como parte de la imagen instalada en el dispositivo. Debido a la naturaleza de estos protocolos de seguridad, es posible que no pueda usar las herramientas de prueba disponibles para comprobar el dispositivo, por lo que puede escribir una aplicación de prueba que se pueda ejecutar en el dispositivo IoT. A continuación, esta aplicación realizaría las pruebas de comprobación de las distintas áreas y funciones del dispositivo IoT.
Las pruebas de una imagen comercial personalizada para Windows IoT Core se pueden realizar de una de las siguientes maneras:
Imagen comercial limpia
Si realmente desea tener una imagen comercial limpia, deberá crear dos imágenes comerciales para el dispositivo. Estas dos imágenes serán idénticas, excepto que una imagen incluirá la aplicación de prueba (configurada como una aplicación en primer plano), mientras que la otra imagen "limpia" no lo hará. Debería mostrar la primera imagen (con la aplicación de prueba incluida) y realizar las validaciones de prueba en el dispositivo IoT. Una vez comprobado, puede volver a flashear el dispositivo IoT con la segunda imagen comercial "limpia", para su distribución.
Ventajas: La imagen final del comercio minorista será totalmente limpia y solo los artículos que se consideran necesarios se incluyen en la imagen.
Desventajas: incluir una aplicación de prueba en la imagen comercial podría presentar algunos posibles problemas con los paquetes de aprovisionamiento, así como posibles errores de usuario en la aplicación de prueba. Esto haría que esta imagen comercial sea diferente de la imagen comercial final.
prueba de paso a través de One-Time
Solo se crea una imagen comercial final y también incluiría la aplicación de prueba. Configuraría la imagen de forma que, una vez iniciada la aplicación de experiencia rápida (OOBE), se inicia la aplicación de prueba (como una aplicación en primer plano). Se desencadenaría una instrucción condicional dentro de la aplicación de prueba para que la aplicación tenga en cuenta que se ejecutó una vez antes (lo que impide que se ejecute después de la primera vez que el dispositivo esté encendido).
// 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"];
Nota:
Para obtener los mejores resultados, use solo localSettings
para almacenar las variables para almacenar el valor de configuración. Existe la posibilidad de que los resultados no deseados usen roamingSettings
características.
localSettings
solo puede contener 64 000 de datos en el momento de redactar este documento. Obtenga más información sobre la configuración de la aplicación aquí.
Con el bloque de código anterior, puede aplicar la lógica al iniciar la aplicación de prueba para que, en los inicios posteriores, la aplicación realice las acciones adecuadas.
¿Qué tipos de acciones puedo realizar?
- Inicio de otra aplicación de FGA
- Editar el Registro para modificar la secuencia de arranque
Inicio de otra aplicación FGA desde la aplicación de prueba
Si va a iniciar una aplicación de Microsoft Store, puede usar el siguiente fragmento de código para iniciar aplicaciones instaladas y actualizadas a través de la tienda. Puede encontrar información adicional sobre los esquemas de URI aquí.
// 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"));
Si va a iniciar una aplicación personalizada (que no es de Microsoft Store), puede usar AppServiceConnection
para iniciar una aplicación mediante el nombre de familia de paquete (PFN).
En primer lugar, debe registrar la aplicación final (com.concurrency.lwinsapp) con app services dentro del sistema. Tendrá que modificar para Package.appxmanifest file
incluir el siguiente bloque de código en la <Applications>
sección del manifiesto.
<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>
El segmento de código siguiente iniciará una aplicación personalizada:
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();
Al combinar lógica entre localSettings
y AppServiceConnection
, puede omitir la aplicación de prueba en cada arranque del dispositivo. En esencia, la aplicación de prueba se ejecutará en cada arranque, pero "paso a través" a la aplicación final en el arranque. Si es necesario, puede establecer la lógica de forma que el dispositivo no continúe con la aplicación final si se produce un error en las pruebas en la aplicación de prueba. Esto puede resultar útil si necesita comprobar que el dispositivo está totalmente probado y funcional en cada arranque.
Ventajas: puede probar el dispositivo automáticamente en cada arranque para asegurarse de que ciertas condiciones se establecen correctamente y que el dispositivo está totalmente probado (y seguro).
Desventajas: la aplicación de prueba se incluye con la imagen comercial. Existe el potencial de que la aplicación tenga agujeros de seguridad. Asegúrese de que la aplicación de prueba está bloqueada según sea necesario. Debido a la naturaleza de la aplicación de prueba, es posible que pueda modificar las características del dispositivo.