Tutorial: uso de la API bootstrapper en una aplicación empaquetada con ubicación externa o sin empaquetar que utiliza el SDK de Windows App
En este artículo se muestra cómo configurar una aplicación que no está instalada mediante MSIX (es decir, se empaqueta con una ubicación externa o sin empaquetar) para usar la API de arranque para que cargue explícitamente el entorno de ejecución de SDK de Aplicaciones para Windows y llame a SDK de Aplicaciones para Windows API. Las aplicaciones que no están instaladas a través de MSIX incluyen aplicaciones empaquetadas con ubicación externa y aplicaciones sin empaquetar.
Importante
A partir del SDK de Aplicaciones para Windows 1.0, el enfoque predeterminado para cargar el SDK de Aplicaciones para Windows desde una aplicación empaquetada con una ubicación externa o sin empaquetar es usar la inicialización automática mediante la propiedad <WindowsPackageType>
del proyecto (así como realizar cambios de configuración adicionales). Para conocer los pasos implicados en la inicialización automática en el contexto del proyecto winUI 3, consulte Creación del primer proyecto de WinUI 3. O bien, si tiene un proyecto existente que no es WinUI 3, consulte Uso del SDK de Aplicaciones para Windows en un proyecto existente.
Si tiene necesidades avanzadas (como el control de errores personalizado o si quiere cargar una versión específica del SDK de Aplicaciones para Windows), puede llamar explícitamente a la API del programa previo. Y ese es el enfoque que muestra este tema. Además, para obtener más información, consulta Uso del entorno de ejecución de SDK de Aplicaciones para Windows para aplicaciones empaquetadas con ubicación externa o sin empaquetar.
En este tema se muestra cómo llamar explícitamente a la API de arranque desde un proyecto básico de aplicación de consola; pero los pasos se aplican a cualquier aplicación de escritorio sin empaquetar que use el SDK de Aplicaciones para Windows.
Antes de completar este tutorial, se recomienda revisar la arquitectura en tiempo de ejecución para obtener más información sobre la dependencia del paquete framework que toma la aplicación cuando usa la SDK de Aplicaciones para Windows y los componentes adicionales necesarios para trabajar en un empaquetado con ubicación externa o aplicación sin empaquetar.
Requisitos previos
- Instalación de herramientas para el SDK de Aplicaciones para Windows.
- Asegúrese de que todas las dependencias para empaquetadas con ubicación externa y aplicaciones sin empaquetar están instaladas (consulte SDK de Aplicaciones para Windows guía de implementación para aplicaciones dependientes del marco empaquetadas con ubicación externa o sin empaquetar). Una manera fácil de hacerlo es ejecutar el instalador en tiempo de ejecución de SDK de Aplicaciones para Windows.
Instrucciones
Puede seguir este tutorial mediante un proyecto de C# o C++.
Nota:
Las dependencias dinámicas y las API de arranque producen un error cuando se les llama mediante un proceso con privilegios elevados. Como resultado, Visual Studio no debe iniciarse con privilegios elevados. Consulte Dependencias dinámicas no admite la elevación n.º 567 para obtener más detalles.
Siga estas instrucciones para configurar un proyecto de WinUI 3 de C# que esté empaquetado con ubicación externa o sin empaquetar.
En Visual Studio, cree un proyecto de aplicación de consola de C#. Asigne al proyecto el nombre DynamicDependenciesTest. Después de crear el proyecto, debe tener un mensaje "Hello, World!" Aplicación de consola de C#.
A continuación, configure el proyecto.
- En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Editar archivo del proyecto.
- Reemplace el valor del elemento TargetFramework por un moniker de la plataforma de destino. Por ejemplo, use lo siguiente si la aplicación tiene como destino Windows 10, versión 2004.
<TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
- Guarda y cierra el archivo de proyecto.
Cambie la plataforma de la solución a x64. El valor predeterminado de un proyecto de .NET es AnyCPU, pero WinUI 3 no admite esa plataforma.
- Seleccione Compilar>Administrador de configuración.
- Seleccione la lista desplegable que hay bajo Plataforma de solución activa y haga clic en Nueva para abrir el cuadro de diálogo Nueva plataforma de solución.
- En el menú desplegable que hay bajo Escriba o seleccione la nueva plataforma, seleccione x64.
- Haga clic en Aceptar para cerrar el cuadro de diálogo Nueva plataforma de solución.
- En Administrador de configuración, haga clic en Cerrar.
Instale el paquete NuGet del SDK de Aplicaciones para Windows en el proyecto.
- En el Explorador de soluciones, haga clic con el botón derecho en el nodo Dependencias y seleccione Administrar paquetes NuGet.
- En la ventana Administrador de paquetes NuGet, seleccione la pestaña Examinar e instale el paquete Microsoft.WindowsAppSDK.
Ya está listo para usar la API de arranque (consulte Uso del entorno de ejecución de SDK de Aplicaciones para Windows para aplicaciones empaquetadas con ubicación externa o sin empaquetar) para tomar dinámicamente una dependencia del paquete de SDK de Aplicaciones para Windows framework. Esto le permite usar las API del SDK de Aplicaciones para Windows en la aplicación.
Abra el archivo de código Program.cs y reemplace el código predeterminado por el código siguiente para llamar al método Bootstrap.Initialize para inicializar el programa previo. Este código define en qué versión del SDK de Aplicaciones para Windows depende la aplicación al inicializar el programa previo.
Importante
Deberá editar el código siguiente para adaptarse a su configuración específica. Vea las descripciones de los parámetros del método Bootstrap.Initialize para que pueda especificar una de las versiones de la SDK de Aplicaciones para Windows que ha instalado.
using System; using Microsoft.Windows.ApplicationModel.DynamicDependency; namespace DynamicDependenciesTest { class Program { static void Main(string[] args) { Bootstrap.Initialize(0x00010002); Console.WriteLine("Hello, World!"); // Release the DDLM and clean up. Bootstrap.Shutdown(); } } }
En su raíz, la API de arranque es una API nativa de C/C++ que permite usar las API de SDK de Aplicaciones para Windows en la aplicación. Pero en una aplicación de .NET que usa el SDK de Aplicaciones para Windows 1.0 o posterior, puede usar el contenedor de .NET para la API de arranque. Ese contenedor proporciona una manera más sencilla de llamar a la API de arranque en una aplicación .NET que llamar directamente a las funciones nativas de C/C++. El ejemplo de código anterior llama a los métodos static Initialize y Shutdown de la clase Bootstrap en el contenedor de .NET para la API de arranque.
Para demostrar que los componentes del entorno de ejecución del SDK de Aplicaciones para Windows se cargaron correctamente, agregue código que use la clase ResourceManager en el SDK de Aplicaciones para Windows para cargar un recurso de cadena.
Agregue un nuevo archivo de recursos (.resw) al proyecto (deje el nombre predeterminado).
Con el archivo resources abierto en el editor, cree un nuevo recurso de cadena con las siguientes propiedades.
- Nombre: Message
- Valor: Hello, resources!
Guarde el archivo de recursos.
Abra el archivo de código Program.cs y reemplace la
Console.WriteLine("Hello, World!");
línea por el código siguiente.
// Create a resource manager using the resource index generated during build. var manager = new Microsoft.Windows.ApplicationModel.Resources.ResourceManager("DynamicDependenciesTest.pri"); // Look up a string in the .resw file using its name. Console.WriteLine(manager.MainResourceMap.GetValue("Resources/Message").ValueAsString);
- Haga clic en Iniciar sin depurar (o Iniciar depuración) para compilar y ejecutar la aplicación. Debería ver que la cadena
Hello, resources!
se muestra correctamente.
Si el proyecto es WPF
Para obtener una aplicación de Windows Presentation Foundation (WPF), consulta Usar el SDK de Aplicaciones para Windows en una aplicación WPF.