Introducción al Contenedor de aplicación de Windows CE
La Contenedor de aplicación de Windows CE es una tecnología que permite que la mayoría de las aplicaciones de ce se ejecuten sobre Windows 10 IoT Core.
La solución se ha creado en dos fases. La primera fase crea una imagen Windows CE 2013 mediante un BSP para la arquitectura x86 o ARM32. Después, en la segunda fase, esta imagen se incluye en una imagen de Windows 10 IoT Core que usa el BSP x64 o ARM32 para el hardware de dispositivo específico donde se instalará la solución.

Para obtener más información sobre esta arquitectura, consulte este vídeo: Modernización de Windows CE dispositivos.
Requisitos previos
El software Contenedor de aplicación de Windows CE requiere una versión actualizada de Windows Compact 2013 (número de compilación 6294 a partir de junio de 2020 o posterior) junto con paquetes Windows 10 IoT Core actualizados para x64 y ARM32 (actualización de agosto de 2020o posterior). Para obtener los paquetes más recientes para Windows 10 IoT Core, póngase en contacto con su distribuidor de Microsoft.
Nota
Debe tener una suscripción válida a IoT Core Services para distribuir un dispositivo que emplee la tecnología ce App Container.
Además, necesitará lo siguiente:
Microsoft Visual Studio 2013 Professional o Visual Studio 2015 Professional. Estas versiones son necesarias para las herramientas Generador de aplicaciones y Generador de plataformas.
Generador de aplicaciones para Windows Embedded Compact 2013
Platform Builder para Windows Compact 2013
Un BSP de IoT Core en funcionamiento
Las herramientas a las que se hace referencia en Windows guía de fabricación de IoT
No olvide instalar los componentes actualizados en lugar de los a los que se hace referencia en esta guía Windows 10 (complemento de ADK y Windows 10 ADK PE, complementos de IoT Core ADK, Panel de Windows 10 IoT Core)
Configuración, creación y empaquetado de CE para la Contenedor de aplicación de Windows CE
El proceso para crear una Windows imagen de Embedded Compact 2013 no se ha actualizado significativamente. El proceso general para crear una imagen es:
Creación de un proyecto de diseño del sistema operativo con Platform Builder
Selección del paquete de compatibilidad de platform builder board (BSP)
Elección de la plantilla de diseño adecuada
Configuración de las opciones proporcionadas por la plantilla de diseño
Opcionalmente, agregue los subproyyósmos al proyecto de diseño.
Compilación de la imagen
El cambio principal está en la selección del BSP correcto y consideraciones adicionales para la imagen de ce. En esta guía se da por supuesto que ya está familiarizado con el proceso para crear una imagen de sistema Windows CE, pero merece la pena mirar más a fondo la sección modificada.
El paso 2 es la única parte del proceso de proyecto de diseño del sistema operativo anterior que se cambia al usar el contenedor de aplicaciones de la ce. Consulte a continuación para obtener más detalles.
Paso 2: Selección de BSP de Platform Builder
Para admitir la Contenedor de aplicación de Windows CE, se ha agregado un nuevo BSP que tiene como destino las arquitecturas x86 y ARM a Platform Builder.
Al crear un diseño de sistema operativo para el contenedor de aplicaciones ce, seleccione "Contenedor de aplicación de Windows CE: x86" o "Contenedor de aplicación de Windows CE: ARMv7" (ARM32) en función del hardware subyacente del dispositivo basado en IoT Core.
Por ejemplo, si el dispositivo IoT Core de destino usa hardware Intel, seleccionará la opción "Contenedor de aplicación de Windows CE: x86". Como alternativa, si el hardware de IoT Core usa NXP i.MX6, seleccionará la opción "Contenedor de aplicación de Windows CE: ARMv7".

Después de hacer esto, tendrá la capacidad de configurar las opciones y los proyectos adicionales como haría normalmente para una imagen de Windows Embedded Compact. Estas configuraciones se van a basar en el contenedor ce que implementará en la imagen Windows 10 IoT Core datos.
Creación de la Windows 10 IoT Core imagen
Nota
Este proceso se trata con más detalle en los laboratorios que forman parte de Windows 10 IoT Core Manufacturing Guide. En la sección siguiente solo se proporcionan acciones adicionales para ejecutar en determinadas fases del proceso de creación de imágenes de IoT Core. Se recomienda encarecidamente familiarizarse con la guía de fabricación Windows 10 IoT Core antes de continuar.
Información general del proceso
A diferencia del proceso de creación de una imagen de Windows Embedded Compact, Windows 10 IoT Core aún integra la creación de firmware, paquetes de compatibilidad de placa, definición de imagen e inclusión de aplicaciones. Mediante el uso de tecnologías diferentes para estas piezas, puede separar el trabajo que necesita realizar entre distintos equipos o individuos de su organización.
Los pasos básicos para crear una imagen son:
Importar el paquete de compatibilidad de la placa de IoT Core (BSP) adecuado
Importar el contenedor de aplicaciones de CE que creó anteriormente
Hay guías detalladas para cada uno de estos pasos como parte de Windows 10 IoT Core Manufacturing Guide. Aunque algunos de estos pasos son como el proceso de uso de Platform Builder (PB) para crear una imagen de dispositivo, merece la pena explorar algunas áreas más profundamente.
Paso 1: Crear un área de trabajo
Revise la documentación, Creación de una imagen básica,en la Guía de fabricación de IoT Core para obtener información sobre cómo crear un área de trabajo.
Paso 2: Importar el paquete de compatibilidad de la placa de IoT Core (BSP) adecuado
Revise la documentación, Creación de una imagen básica,en la Guía de fabricación de IoT Core para obtener soporte técnico para la placa.
Paso 3: Importar el Contenedor de aplicación de Windows CE
La Contenedor de aplicación de Windows CE se crea mediante PB como se ha descrito anteriormente y se importa en el área de trabajo de IoT Core mediante el comando Import-IoTCEPAL. Este comando copiará el contenido necesario del directorio de versión plana ce en el área de trabajo de IoT ADK. Si se invoca varias veces, se hace una copia de seguridad del estado anterior en el Source-\$Arch\CEPAL.OLD directorio del área de trabajo.
Paso 4: Creación de la definición de producto
Revise la documentación, Creación de una imagen básica,en la Guía de fabricación de IoT Core para crear la definición de producto.
Paso 5: Agregar un contenedor de aplicaciones de CE a un producto
Una vez que haya importado la definición del contenedor de aplicaciones de CE en el área de trabajo, deberá asegurarse de ejecutar el comando Add-IoTCEPAL, que agregará una referencia a los paquetes de contenedor de aplicaciones de CE a los archivos de OEMInput.xml de producto correspondientes (prueba y venta al por menor).
El siguiente paso consiste en usar el comando Add-IoTProductFeature para agregar la característica IOT_CEPAL a la OEMInput.xml. Esto agrega la compatibilidad de host de Windows para Contenedor de aplicación de Windows CE (aplicación para UWP de front-end y controladores de soporte técnico) Windows CE nuestra definición de producto e incluye el contenedor de aplicaciones ce en el grupo aplicaciones predeterminado. Trataremos la configuración de inicio en una sección posterior.
Paso 6: Compilación de los archivos CAB
Este es un paso importante durante la creación de la FFU y debe realizarse siempre que cambie una configuración, agregue o cambie una aplicación o controladores. Usará New-IoTCabPackage con la opción "All". También puede compilar características únicas según sea necesario, pero en general debe recompilar todos los paquetes antes del paso de compilación de la FFU como procedimiento recomendado.
Paso 7: Implementación de FFU en el dispositivo
Una vez creada la imagen, puede implementarla en un dispositivo. Esto se puede hacer desde la línea de comandos mediante DISM, a través del proceso de implementación específico del dispositivo o mediante el Panel de Windows 10 IoT Core. Hay más detalles disponibles como parte de la guía Windows 10 IoT Core fabricaciónde .
Implementación de la Contenedor de aplicación de Windows CE en un dispositivo cuando se usa una FFU existente
Las CAB de CE son paquetes que se pueden implementar en IoT Core. Si hay una imagen de IoT Core existente, estas CAB se pueden implementar en el dispositivo mediante el APPLYUPDATE comando . En primer lugar, copie las CAB en el dispositivo y, a continuación, e inicialmente y confirme las CAB con APPLYUPDATE . Tenga en cuenta que la actualización de esta manera respeta el control de versiones del paquete, por lo que si las versiones actualizadas de los paquetes se van a implementar en el dispositivo, deben tener un número de versión mayor. (Consulte el Set-IoTCabVersion en el entorno de IoT ADK). Puede encontrar más información al respecto en Crear e instalar paquetes.
Paso 8: Creación de una imagen comercial
Tener una imagen firmada correctamente es una parte importante de la protección y actualización de un dispositivo. Por Windows 10 IoT Core, esto aparece como la diferencia entre las compilaciones firmadas por pruebas y las compilaciones firmadas por retail. Nunca debe implementar públicamente una imagen firmada de prueba. Las imágenes firmadas de prueba solo se deben usar con fines de depuración y debe corregir los errores o cambios de configuración antes de crear la imagen final firmada por el minorista.
Nota
Además de las herramientas de desarrollo e implementación instaladas en la máquina, también necesitará lo siguiente para habilitar la firma comercial:
- Un certificado de firma de código comercial
- Un certificado de firma cruzada
Firmar e incluir correctamente las aplicaciones
Si tiene una o varias aplicaciones personalizadas que desea incluir en la imagen comercial de Windows 10 IoT Core, debe comprobar que estas aplicaciones están firmadas correctamente al incluirlas en la imagen comercial.
Información adicional
Adición de nuevas aplicaciones a una imagen existente
Para agregar una nueva aplicación a un diseño de sistema operativo existente, puede agregar el proyecto como un subproyóseno al Project de diseño del sistema operativo o puede crear paquetes CAB de implementación normales para implementarlos en el dispositivo como parte de la configuración inicial del dispositivo.
Procedimientos recomendados de empaquetado
Siempre debe asegurarse de que los paquetes son lo más pormenorizados posible para reducir el tiempo de actualización.
Puesto que un paquete es la unidad más pequeña de actualización, asegúrese de que cada paquete sea lo más pequeño posible. Al compilar en Platform Builder, los paquetes generados se separan según la sección de memoria y el tipo de módulo o archivo de acuerdo con el archivo de color automáticamente.
En el caso de los recursos personalizados integrados en Platform Builder y empaquetados a través de OSDesign.pack, considere la posibilidad de agregar recursos personalizados a una sección de memoria independiente de LAN (no en LAN), para que las actualizaciones del código personalizado se puedan enviar de forma independiente de las actualizaciones del sistema operativo ce.
Para los recursos personalizados agregados a través de los comandos de empaquetado de IoT ADK: asegúrese de que los paquetes creados son lo más pequeños posible.
Agregar otras cosas al paquete de Platform Builder
En general, la recomendación es no modificar el paquete resultante generado por Platform Builder para incluir componentes adicionales en la imagen del sistema. En su lugar, siga la Windows 10 IoT Core de fabricación . Sin embargo, si los archivos deben agregarse al paquete creado por Platform Builder, siga el proceso existente. Al agregar contenido al paquete generado por PB, tenga en cuenta lo siguiente:
Hay un tamaño máximo para los paquetes (aproximadamente 400 MB) y superar este tamaño impedirá la actualización.
Las actualizaciones se suceden en la granularidad del paquete. Si es necesario actualizar un único recurso del paquete, todos los recursos de ese paquete se actualizarán al mismo tiempo. Para reducir el tamaño de las actualizaciones, aísle el contenido en paquetes independientes para minimizar el tamaño general de la actualización.
Adición de archivos adicionales a través de Platform Builder
El proceso de empaquetado detallado anteriormente está controlado por las mismas entradas que se introducen en la creación de un archivo CE BIN. Por lo tanto, si se hace referencia a los archivos en OSDesign.ldap y las entradas del Registro se agregan a OSDesign.reg, el proceso incluirá estos archivos en el archivo MAKEIMG CAB resultante. Durante este proceso MAKEIMG ahora:
ROMIMAGEcreará un directorio denominado dentro del Directorio de versión plana (FRD) que crea una estructura de directorios instalada paraCEPAL\_PKGWindows CE para CEPAL.ROMIMAGErealiza un inventario de todos los archivos CE que se colocaronCEPAL\_PKGen en función de los archivos CE CEF.ROMIMAGEcreará varios archivos WM.XML para cada sección de memoria. Esto se hace para que las actualizaciones se puedan insertar de forma más granular, ya que la unidad mínima de actualización es un paquete.ROMIMAGEcreará que hace referencia a todos los paquetes creados.
Todos los paquetes creados se denominarán con un prefijo fijo de , donde se rellena durante el proceso de creación de IoT Core al llamar a “%OEM\_NAME%.WindowsCE.\*”%OEM\_NAME%“%OEM\_NAME%.WindowsCE.\*”. El nombre del paquete dentro del espacio de nombres se deriva de la sección de memoria del archivo CSV (por ejemplo, LAV) seguido de módulos o archivos (también determinados por el archivo DER).
Comunicación entre Windows Embedded Compact 2013 y Windows 10 IoT Core aplicaciones
El enfoque recomendado para comunicarse entre las aplicaciones que se ejecutan en el contenedor ce es usar bucles de retorno locales. Puede leer más sobre bucles locales en este documento.
Inicio automático de la aplicación ce App Container
Para iniciar automáticamente la aplicación contenedora ce, puede crear un paquete de aprovisionamiento que establece la aplicación de inicio en "Microsoft. Windows. IoT.CEPAL.DkMonUWP_cw5n1h2txyewy! App", e incluye este paquete de aprovisionamiento en la imagen. También deberá quitar la aplicación de inicio predeterminada mediante el comando Remove-IoTProductFeature y quitando el identificador de característica de IOT_BERTHA de la definición de producto de IoT Core.
Opciones de configuración disponibles para el Contenedor de aplicación de Windows CE
Configuración basada en el Registro en CE
Pila no ejecutable de forma predeterminada
El Contenedor de aplicación de Windows CE deshabilita las páginas de pila ejecutables de forma predeterminada para mejorar la seguridad. Sin embargo, algunas aplicaciones heredadas pueden basarse en este comportamiento para ejecutarse correctamente. Para habilitar una pila ejecutable, establezca el siguiente valor del Registro en la imagen ce (se recomienda que esto vaya a OSDesign.reg en Platform Builder).
KeyPath = HKEY\_LOCAL\_MACHINE\CEPAL
ValueName = MemoryOptions Type = REG\_DWORD
Value = 1
Invalidación de 565 bits para GWES
Si el Contenedor de aplicación de Windows CE se configura con una pantalla de 32 bits, gwes realiza conversiones RGB de 16 a 32 bits con la suposición de que los datos de píxel RGB de 16 bits están en formato RGB555. Si los recursos de mapa de bits están en 565 bits y la conversión a rgb555 de estos recursos no es posible, el comportamiento de conversión predeterminado de GWES se puede cambiar a través de una clave del Registro. Cree la siguiente clave del Registro:
HKEY\_LOCAL\_MACHINE\SYSTEM\GDI\16bpp565RGBPalette.
Configuración basada en el Registro en host (IoT Core)
Configuración de puertos serie para el Contenedor de aplicación de Windows CE
Los puertos serie del host deben asignarse al entorno ce. Esta asignación existe en el registro de IoT Core y debe configurarla el creador de la imagen.
En HKEY\_CURRENT\_USER\Software\Microsoft\Windows NT\CurrentVersion\CEPAL\Devices\Serial , existen entradas de configuración para asignar puertos COM invitados a puertos COM host mediante el esquema siguiente.
KeyPath = HKEY\_CURRENT\_USER\Software\Microsoft\Windows NT\CurrentVersion\CEPAL\Devices\Serial\0
ValueName = Guest Type = REG\_SZ Value = COM1
ValueName = Host
Type = REG\_SZ
Value = \\?\Some\DeviceInterface\Path
KeyPath= HKEY\_CURRENT\_USER\Software\Microsoft\Windows NT\CurrentVersion\CEPAL\Devices\Serial\1
ValueName = Guest Type = REG\_SZ Value = COM2
ValueName= Host Type = REG\_SZ
Value = \\?\Some\Other\DeviceInterface\Path
Si la ruta de acceso del Registro anterior no existe cuando se inicia CE, se escribirá una configuración predeterminada basada en los dispositivos serie detectados en el sistema.
Configuración basada en archivos en host
El contenedor ce se puede configurar mediante un archivo local en el host C:\WindowsCE\CEEnvConfig.json . Este es un ejemplo de este archivo de configuración:
{
"OEMOptions" :
{
"GUI" : true,
"Width" : 1024,
"Height" : 768, "FillScreen" : true, "ColorDepth" : 32,
"RefreshRate" : 30, "noAslrSupport" : true, "OemConfigApp" : "",
"OemConfigFile" : ""
},
"CEPALDevOptions" :
{
"VsDebugMode" : true, "FastDebugBoot" : false
}
}
OEMOptions
| Clave | Descripción |
|---|---|
| GUI | Inicio del contenedor de aplicaciones ce con la interfaz de usuario (valor predeterminado true) |
| Ancho | Ancho de la pantalla del contenedor de aplicaciones ce (valor predeterminado 1024) |
| Alto | Alto de la pantalla del contenedor de aplicaciones ce (valor predeterminado 768) |
| FillScreen | |
| Colordepth | Establece los bits predeterminados por píxel (valor predeterminado 32) |
| RefreshRate | Cuántas veces se vuelve a dibujar la pantalla por segundo |
| noAslrSupport | Deshabilita la selección aleatoria del diseño del espacio de direcciones en el contenedor de aplicaciones ce (valor predeterminado true) |
| OEMConfigApp | Nombre de familia del paquete de una aplicación proporcionada por OEM que se debe iniciar para la configuración. |
| OEMConfigFile | Ruta de acceso a un archivo que contiene opciones de configuración adicionales compartidas entre OEMConfigApp y el contenedor de aplicaciones ce |
El contenedor de aplicaciones ce solo hace que una interfaz de red esté disponible para su uso. Si hay varias NIC en el sistema host, se debe seleccionar una interfaz en el Registro de host para asegurarse de que la NIC seleccionada es determinista.
OEMConfigFile
OEMConfigFile se especifica en C:\WindowsCE\CEEnvConfig.json . Asegúrese de que una aplicación para UWP pueda leer este archivo. A continuación se muestra un ejemplo:
{
“FactoryReset”: false, “PlatformBuilderDebugMode”: false,
“NetInterface”: “Some Network Profile Id”
}
Opciones:
| Clave | Descripción |
|---|---|
| FactoryReset | Lo usa la aplicación de configuración para indicar al contenedor de aplicaciones ce que vuelque el estado persistente. |
| PlatformBuilderDebugMode | Se usa para arrancar el contenedor de aplicaciones ce con compatibilidad con KITL para la depuración con Platform Builder. |
| NetInterface | Seleccione una interfaz de red para CE en función del nombre del perfil. |