本文介绍 Windows 应用 SDK 部署的高级体系结构。 以下概念主要适用于依赖于 Windows 应用 SDK 框架的应用。 依赖于框架的应用取决于目标计算机上存在的 Windows 应用 SDK 运行时。
有两个主要选项可用于分发依赖于框架的应用:
应用部署方法 | 要求 |
---|---|
已包装 | - 必须在包清单中声明对框架包的依赖项。 - Microsoft应用商店分布式应用需要部署 API,建议用于非应用商店分布式应用,以确保安装运行时依赖项。 |
打包至外部位置或不打包 | - 必须使用安装程序或直接安装所需的 MSIX 包来分发运行时。 - 其他运行时要求:必须通过 Bootstrap API 初始化对 Windows 应用 SDK 运行时的访问权限。 |
有关这些要求的详细信息,请参阅以下文章:
关键术语
以下部分定义了 Windows 应用 SDK 部署的关键术语,以及其中一些包的其他详细信息。
术语 | 定义 |
---|---|
Windows 应用 SDK 运行时 | 应用使用 Windows 应用 SDK 所需的 MSIX 包。 这些包包括:Framework、Main、Singleton 和 DDLM。 根据所使用的功能和应用部署方法,需要在目标计算机上设置一组这些包。 |
Framework 包 | 包含应用在运行时使用的二进制文件(大多数 Windows 应用 SDK 功能)。 该框架包含引导程序组件,使应用能够自动安装最新版本的 Windows 应用 SDK,该 SDK 将在常规发布节奏上更新。 |
主软件包 | 包含用于跟踪动态依赖项的后台任务的包,并支持从 Microsoft 商店自动更新框架包。 |
单例包 | 包含框架包中未包含的后台任务、服务、应用扩展和其他组件,例如推送通知。 通常,这是一个在应用之间协调的长时间运行的单个进程。 |
动态依赖生命周期管理包 (DDLM) | 防止 OS 在使用具有外部位置的打包应用或未打包应用时执行对 MSIX 包的服务更新。 |
Bootstrapper | 一个用于应用本地的二进制文件,它可以与放置在外部位置的应用和未打包的应用一起使用,以便根据应用需求查找并加载最佳匹配的 Windows 应用 SDK 版本。 |
预配 | 安装和注册包(包括文件和注册表项)的过程是在系统范围内完成,以消除其他用户重复安装的需要。 它可以作为 OS 的一部分完成,也可以在安装应用期间完成。 |
安装程序 | 指部署 Framework、Main、Singleton 和 DDLM 包的 .exe 安装程序。 |
MSIX | 新式安装程序技术,使用户能够直接从 Microsoft 应用商店或网站安全地安装每个用户的应用。 在企业版或共享电脑上,可以通过 PowerShell 和 MDM 为所有用户安装应用。 |
框架包
生成使用 Windows 应用 SDK 的应用时,应用引用一组通过 框架包分发给最终用户的 Windows 应用 SDK 运行时组件。 框架包允许应用通过用户设备上的单个共享源访问 Windows 应用 SDK 组件,而不是将它们捆绑到应用包中。 框架包还承载自己的资源,例如 DLL 和 API 定义(COM 和 Windows 运行时注册)。 这些资源在您的应用程序的上下文中运行,因此它们会继承应用程序的功能和特权,而不具备或宣称自己的任何功能或特权。 有关框架包依赖项的详细信息,请参阅 MSIX 框架包和动态依赖项。
Windows App SDK 框架包是一个 MSIX 包,它通过 Microsoft 应用商店部署到最终用户。 它可以通过服务更新版本轻松快速地进行更新,这些更新可能包括安全性和可靠性的修复。 使用 Windows 应用 SDK 的所有依赖框架的应用都依赖于框架包的共享实例,如下图所示。
当为新版本的 Windows 应用 SDK 框架包提供服务时,所有依赖框架的应用都会更新到新版本,而无需重新分发副本。 Windows会更新到已发布的框架的最新版本,在应用程序重新启动时,会自动引用最新的框架包版本。 在系统上的应用不再运行或主动使用旧版框架包版本之前,不会将其从系统中删除。
由于应用兼容性对于Microsoft和依赖于 Windows 应用 SDK 的应用非常重要,因此 Windows 应用 SDK 框架包遵循 语义版本控制 2.0.0 规则。 这意味着,在 Windows 应用 SDK 版本 1.0 发布后,Windows 应用 SDK 框架包将保证次要版本和修补程序版本更改之间的兼容性,重大更改仅在主要版本更新之间发生。
单例包
单例包 可确保一个长时间运行的进程可以处理多个应用程序间共享的服务,这些服务可能在不同版本的 Windows 应用 SDK 上运行。
为了启用 推送通知,针对使用低于 20H1 版本 Windows 的未打包应用和打包的 Win32 应用程序需要使用 Windows App SDK 单例,因为现有的 UWP PushNotificationTrigger 和 ToastNotificationActionTrigger 类不支持此功能。 框架包无法支持的未来 Windows 应用 SDK 功能将添加到 Singleton 包。
未打包应用的其他要求
Bootstrapper
引导程序是一个库,必须与打包到外部位置的应用或者未打包的应用一起包含。 它提供了引导程序 API(请参阅 使用 Windows 应用 SDK 运行时运行打包在外部位置或未打包的应用),这使得未打包的应用能够执行这些重要任务:
- 初始化 Windows 应用 SDK 框架包的动态依赖项生存期管理器(DDLM)。
- 查找 Windows 应用 SDK 框架包并将其加载到应用的包图。
为了完成这些任务,NuGet 包利用模块初始化器为你配置引导程序。 只需在项目文件中设置 <WindowsPackageType>None</WindowsPackageType>
。 在高级方案中,如果想要控制初始化,可以直接在应用的启动代码中调用引导程序 API(请参阅 教程:在打包到外部位置或未打包并使用 Windows 应用 SDK 的应用中使用引导程序 API),以便它能够正确地初始化未打包应用的系统。 应用必须使用引导程序 API,然后才能使用 Windows 应用 SDK 功能,例如 WinUI、应用生命周期、MRT Core 和 DWriteCore。
Windows 应用 SDK 1.0 版本中的引导程序库包括:
- Microsoft.WindowsAppRuntime.Bootstrap.dll (C++和 C#)
- Microsoft.WindowsAppRuntime.Bootstrap.Net.dll (C# 封装)
动态依赖项生存期管理器 (DDLM)
DDLM 的目的是防止在未打包的应用使用时对 Windows 应用 SDK 框架包进行服务操作。 它包含一个服务器,该服务器必须在应用的启动初期由引导程序初始化才能提供该功能。
Windows 应用 SDK 框架包的每个版本和体系结构都有一个 DDLM。 这意味着,在 x64
计算机上,您可能同时拥有 DDLM 的 x86
和 x64
版本,以支持这两种体系结构的应用程序。
其他需求
- 对于打包的应用,VCLibs 框架包依赖项是必需的。 有关详细信息,请参阅 适用于桌面桥的C++运行时框架包。
- 对于未打包的应用,Visual C++ Redistributable 是必需的。 有关详细信息,请参阅 Microsoft Visual C++ Redistributable 最新支持的下载。
- C#. 要查看 .NET 运行时,请查看 下载 .NET。