Aplicaciones de MSIX AppContainer

El tema AppContainer para aplicaciones heredadas trata toda la información en segundo plano necesaria sobre lo que es el entorno de AppContainer y sus ventajas; ese tema también contiene ejemplos de código de C# y C++ para probar si un proceso se ejecuta dentro de un AppContainer.

El tema que está leyendo ahora muestra cómo puede tomar una aplicación empaquetada con MSIX y configurarla fácilmente para que se ejecute en el entorno AppContainer (en un contenedor ligero de aplicaciones). Las aplicaciones de Plataforma universal de Windows (UWP) son automáticamente aplicaciones de AppContainer. Pero también se puede configurar cualquier aplicación de escritorio empaquetada con MSIX para que sea una aplicación de AppContainer.

Un proceso de la aplicación AppContainer y sus procesos secundarios se ejecutan en un contenedor de aplicaciones ligero al que solo pueden acceder los recursos que se les conceden específicamente. Y se aíslan mediante la virtualización del sistema de archivos y del registro. En consecuencia, las aplicaciones implementadas en AppContainer no se pueden piratear para permitir acciones malintencionadas fuera de los recursos asignados limitados.

Sugerencia

Las aplicaciones no empaquetadas también pueden ejecutarse en un AppContainer. Es especialmente fácil usar AppContainer si el empaquetado se realiza mediante MSIX. Por lo tanto, todos los escenarios descritos en este tema se tratan sobre las aplicaciones empaquetadas.

Configuración de un proyecto de WinUI 3 para AppContainer

Los pasos descritos en Creación de un nuevo proyecto para una aplicación de escritorio de C# o C++ empaquetada de WinUI 3 muestran la manera predeterminada y recomendada de crear un nuevo proyecto de WinUI 3.

De forma predeterminada, el archivo del proyecto Package.appxmanifest contiene la configuración de un paquete de plena confianza (es decir, nivel de integridad medio). Las secciones pertinentes tienen este aspecto:

...
<Applications>
  <Application ...
    EntryPoint="$targetentrypoint$">
    ...
  </Application>
</Applications>

<Capabilities>
  <rescap:Capability Name="runFullTrust" />
</Capabilities>
...

Para configurar el paquete como que contiene una aplicación AppContainer, puede editar el atributo EntryPoint y quitar la declaración de funcionalidad restringida (pero mantener el elemento Capabilities). Por ejemplo:

...
<Applications>
  <Application ...
    EntryPoint="windows.partialTrustApplication">
    ...
  </Application>
</Applications>

<Capabilities/>
...

Si el paquete se instala en Windows 10, versión 2004 (10.0; Compilación 19041) o posterior, en lugar de establecer EntryPoint, puede establecer uap10:TrustLevel y uap10:RuntimeBehavior (después de declarar el prefijo del espacio de nombres XML, como se muestra). Por ejemplo:

<Package ...
  xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
  ...>
...
  <Applications>
    <Application ...
      EntryPoint="$targetentrypoint$"
      uap10:TrustLevel="appContainer"
      uap10:RuntimeBehavior="packagedClassicApp">
      ...
    </Application>
  </Applications>

  <Capabilities/>
...

Para obtener más información, consulte estos temas:

Configuración de una solución de dos proyectos WinUI 3 para AppContainer

En la sección anterior se describe el proceso de MSIX de un solo proyecto; que se recomienda y cuál es el valor predeterminado para los nuevos proyectos de WinUI 3. Para más información, consulte Empaquetado de la aplicación mediante MSIX de un solo proyecto.

Pero es posible que tenga un proyecto de WinUI 3 que data de antes de la introducción de la característica MSIX de un solo proyecto. En cuyo caso tendrá dos proyectos en la solución: el proyecto de aplicación, además de un proyecto de empaquetado de aplicaciones de Windows adicional. Si puede migrar el proyecto a MSIX de un solo proyecto, es ideal. Y podrá seguir las instrucciones de la sección anterior. Para más información, consulte Empaquetado de la aplicación mediante MSIX de un solo proyecto.

Si no puede migrar el proyecto a MSIX de un solo proyecto, en esta sección se describe cómo configurar el paquete como que contiene una aplicación AppContainer.

Un proyecto de empaquetado de aplicaciones Windows implica una configuración predeterminada que anula la configuración en Package.appxmanifest. El proyecto se comporta como si hubiera una propiedad TrustLevel en el archivo del proyecto establecida en un valor de Full.

Para solucionar ese valor de propiedad implícito, expanda el nodo Aplicaciones de >dependencias del proyecto de empaquetado y seleccione el nodo que representa la referencia al proyecto de WinUI 3. A continuación, en la ventana Propiedades de Visual Studio (no propiedades del proyecto), para la propiedad Nivel de confianza, seleccione el valor de Confianza parcial.

El archivo de proyecto del proyecto de empaquetado ahora contiene esta propiedad explícita:

...
<ItemGroup>
  <ProjectReference Include="...">
    <TrustLevel>Partial</TrustLevel>
  </ProjectReference>
</ItemGroup>
...

Y ahora puede quitar <rescap:Capability Name="runFullTrust" /> del archivo del proyecto Package.appxmanifest de empaquetado.

Configurar un proyecto de aplicación de Windows (aplicación win32 win32 win32) para AppContainer

Esta sección es para usted si tiene un proyecto C++ tipo Win32 WndProc que fue creado con la plantilla de proyecto Proyecto de aplicación Windows. El primer paso, en pocas palabras, consiste en añadir a su solución un proyecto de empaquetado de aplicaciones Windows en C++. Hay más detalles sobre los pasos exactos en Configuración de la aplicación de escritorio para el empaquetado MSIX en Visual Studio. Ese tema se aplica a las aplicaciones de escritorio escritas en C++ o C#.

A continuación, abra el archivo de proyecto de su nuevo proyecto de empaquetado y añada una propiedad TrustLevel a la propiedad ProjectReference existente, de la siguiente manera:

...
<ItemGroup>
  <ProjectReference Include="...">
    <TrustLevel>Partial</TrustLevel>
  </ProjectReference>
</ItemGroup>
...

Al compilar, es posible que vea el error "error APPX1673: Falta el manifiesto de aplicación del elemento obligatorio "PhoneIdentity". Si esto sucede, edite el archivo Package.appxmanifest del proyecto de la siguiente manera:

<Package ...
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  ...>
...
  <mp:PhoneIdentity
      PhoneProductId="A GUID in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx."
      PhonePublisherId="A GUID in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.">
  </mp:PhoneIdentity>
...

Configurar un proyecto de WPF o WinForms para AppContainer

Esta sección es para usted si tiene alguna de las siguientes opciones:

  • un proyecto de aplicación de Windows Presentation Foundation (WPF) que se creó con la plantilla de proyecto Aplicación WPF de C#. Esto le proporcionará un proyecto de .NET; y es diferente de la plantilla de proyecto denominada Aplicación WPF (.NET Framework). Or
  • un proyecto de aplicación de Windows Forms (WinForms) que se creó con la plantilla de proyecto Aplicación de Windows Forms de C#. Esto le proporcionará un proyecto de .NET; y es diferente de la plantilla de proyecto denominada Aplicación de Windows Forms (.NET Framework).

El primer paso, en pocas palabras, es agregar a la solución un proyecto de empaquetado de aplicaciones de Windows de C#. Hay más detalles sobre los pasos exactos en Configuración de la aplicación de escritorio para el empaquetado MSIX en Visual Studio.

A continuación, expanda el nodo Aplicaciones de >dependencias del proyecto de empaquetado y seleccione el nodo que representa la referencia al proyecto de WPF o WinForms. A continuación, en la ventana Propiedades de Visual Studio (no propiedades del proyecto), para la propiedad Nivel de confianza, seleccione el valor de Confianza parcial.