教程 - 在使用Windows 应用 SDK的非 MSIX 打包应用中使用引导程序 API

本文介绍如何配置未通过 MSIX 部署的应用 (非 MSIX 打包) 以使用引导程序 API,以便显式加载Windows 应用 SDK运行时,并调用Windows 应用 SDK API。 非 MSIX 打包的应用包括稀疏打包或未打包的应用。

[注意]从 Windows 应用 SDK 1.0 预览版 3 开始,从非 MSIX 打包的应用加载Windows 应用 SDK的默认方法是通过<WindowsPackageType>None</WindowsPackageType>项目属性使用自动初始化。 在 创建第一个 WinUI 3 项目中演示了此方法。

如果你有高级需求 ((例如自定义错误处理)或加载特定版本的Windows 应用 SDK) ,则可以改为显式调用引导程序 API。 这就是本主题演示的方法。 有关详细信息,请参阅对非 MSIX 打包的应用使用Windows 应用 SDK运行时

本主题演示如何从基本控制台应用项目显式调用引导程序 API;但这些步骤适用于使用Windows 应用 SDK的任何未打包桌面应用。

在完成本教程之前,建议查看运行时体系结构,了解有关应用使用Windows 应用 SDK时所使用的框架包依赖项的详细信息,以及在非 MSIX 打包 (非 MSIX 打包) 应用中工作所需的附加组件。

先决条件

  1. 安装适用于 Windows 应用 SDK 的工具
  2. 确保 (安装非 MSIX 打包应用的所有依赖项Windows 应用 SDK部署指南,了解依赖于框架的非 MSIX 打包应用) 。 执行此操作的一种简单方法是运行Windows 应用 SDK运行时安装程序。

Instructions

可以使用 C# 或 C++ 项目遵循本教程。

注意

提升的进程调用时,动态依赖项和引导程序 API 会失败。 因此,不应提升Visual Studio。 有关更多详细信息,请参阅 动态依赖项不支持提升 #567

按照这些说明配置非 MSIX 打包的 C# WinUI 3 项目。

  1. 在 Visual Studio 中,创建新的 C# 控制台应用程序项目。 将项目命名为“DynamicDependenciesTest”。

  2. 接下来,配置项目。

    1. 在“解决方案资源管理器”中,右击项目,然后选择“编辑项目文件”。

    2. 将 TargetFramework 元素的值替换为目标框架名字对象。 例如,如果应用目标是 Windows 10 版本 2004,请使用以下项。

      <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
      
    3. 保存并关闭项目文件。

  3. 将解决方案的平台更改为 x64。 .NET 项目中的默认值为 AnyCPU,但 WinUI 3 不支持该平台。

    1. 选择“生成”>“配置管理器”。
    2. 选择“活动解决方案平台”下的下拉列表,单击“新建”选项以打开“新建解决方案平台”对话框。
    3. 在“键入或选择新平台”下的下拉菜单中,选择“x64”。
    4. 选择“确定”以关闭“新建解决方案平台”对话框。
    5. 在“配置管理器”中,单击“关闭”。
  4. 在项目中安装 Windows 应用 SDK NuGet 包。

    1. 在“解决方案资源管理器”中,右键单击“依赖项”节点,然后选择“管理 NuGet 包”。
    2. NuGet 程序包管理器窗口中,选择“浏览”选项卡,并安装 Microsoft.WindowsAppSDK 包。
  5. 现在,可以使用引导程序 API 动态依赖Windows 应用 SDK框架包。 这使你能够在应用中使用 Windows 应用 SDK API。

    打开 Program.cs 代码文件,将默认代码替换为以下代码。

    using System;
    using Microsoft.Windows.ApplicationModel.DynamicDependency;
    
    namespace DynamicDependenciesTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                Bootstrap.Initialize(0x00010000);
                Console.WriteLine("Hello, World!");
    
                // Release the DDLM and clean up.
                Bootstrap.Shutdown();
            }
        }
    }
    

    引导程序 API 是一个本机 C/C++ API,可让你在应用中使用 Windows 应用 SDK API。 在使用 Windows 应用 SDK 1.0 预览版 3 或更高版本的 .NET 应用中,可以将 .NET 包装器用于引导程序 API。 与直接调用本机 C/C++ 函数相比,此包装器提供了一种更简单的方法来调用 .NET 应用中的引导程序 API。 前面的代码示例为引导程序 API 调用 .NET 包装器中 Bootstrap 类的静态 InitializeShutdown 方法。

  6. 为了演示已正确加载 Windows 应用 SDK 运行时组件,请添加一些使用 Windows 应用 SDK 中的 ResourceManager 类加载字符串资源的代码。

    1. 向项目添加新的资源文件 (.resw)。

    2. 在编辑器中打开资源文件后,使用以下属性创建新的字符串资源。

      • 名称:消息
      • 值: 你好,世界!
    3. 保存资源文件。

    4. 打开 Program.cs 代码文件,将以下语句添加到文件顶部:

      using Microsoft.Windows.ApplicationModel.Resources;
      
    5. 请使用以下代码替换 Console.WriteLine("Hello, World!"); 行。

      // Create a resource manager using the resource index generated during build.
      var manager = new Microsoft.ApplicationModel.Resources.ResourceManager("DynamicDependenciesTest.pri");
      
      // Lookup a string in the RESW file using its name.
      Console.WriteLine(manager.MainResourceMap.GetValue("Resources/Message").ValueAsString);
      
  7. 按 F5 生成并运行应用程序。 应会看到字符串 Hello, World! 已成功显示。