依赖于框架的应用的部署体系结构和概述

本文介绍Windows 应用 SDK部署的高级体系结构。 以下概念主要适用于Windows 应用 SDK依赖框架的应用。 依赖于框架的应用取决于目标计算机上存在的Windows 应用 SDK运行时。

可通过两个main选项来分发依赖于框架的应用:

应用部署方法 要求
已打包 - 必须在包清单中声明对框架包的依赖项。
- Microsoft Store 分布式应用需要部署 API,建议用于非应用商店分布式应用,以确保安装运行时依赖项。
使用外部位置打包或未打包 - 必须使用安装程序或通过直接安装所需的 MSIX 包来分发运行时。
- 其他运行时要求:必须通过 Bootstrap API 初始化对 Windows 应用 SDK 运行时的访问。

有关这些要求的详细信息,请参阅以下文章:

关键术语

以下部分定义了Windows 应用 SDK部署的关键术语,以及其中一些包的其他详细信息。

术语 定义
Windows 应用 SDK 运行时 应用使用Windows 应用 SDK所需的 MSIX 包。 这些包包括:Framework、Main、Singleton 和 DDLM。 根据所使用的功能和应用部署方法,需要在目标计算机上使用一组这些包。
框架包 包含应用在运行时使用的二进制文件 (大多数Windows 应用 SDK功能) 。 该框架包括引导程序组件,使应用能够自动安装 Windows 应用 SDK 的最新版本,该 SDK 将会定期发布更新。
main 包 包含用于跟踪动态依赖项的后台任务的包,并支持从 Microsoft Store 自动更新框架包。
单一实例包 包含未包含在框架包中的后台任务、服务、应用扩展和其他组件,例如推送通知。 这通常是在应用之间中转的单个长时间运行的进程。
动态依赖项生存期管理器 (DDLM) 包 阻止 OS 在使用外部位置打包或未打包的应用时对 MSIX 包执行服务更新。
引导程序 与外部位置和未打包的应用一起打包的应用本地二进制文件,用于根据应用需求查找和加载最佳Windows 应用 SDK版本匹配项。
Provisioning 系统范围内安装和注册包(包括文件和注册表项)的过程,省却了其他用户重复安装的过程。 它既可以作为 OS 的一部分完成,也可以在应用安装期间完成。
安装程序 指部署 Framework、Main、Singleton 和 DDLM 包的.exe安装程序。
MSIX 新式安装程序技术,使用户能够直接从 Microsoft Store 或网站为每个用户安全地安装应用。 在企业或共享电脑上,可以通过 PowerShell 和 MDM 为所有用户安装应用。

框架包

当你生成使用 Windows 应用 SDK 的应用时,应用会引用一组 Windows 应用 SDK 运行时组件,这些组件通过框架包分发给最终用户。 框架包允许应用通过用户设备上的单个共享源访问Windows 应用 SDK组件,而不是将它们捆绑到应用包中。 框架包还携带自己的资源,例如 DLL 和 API 定义(COM 和 Windows 运行时注册)。 这些资源在应用上下文中运行,因此它们继承应用的功能和特权,并且不会断言自己的任何功能或特权。 有关框架包依赖项的详细信息,请参阅 MSIX 框架包和动态依赖项

Windows 应用 SDK 框架包是一个 MSIX 包,通过 Microsoft Store 部署到最终用户。 可以使用服务版本轻松快速地更新它,其中可能包括安全性和可靠性修补程序。 使用 Windows 应用 SDK的所有依赖框架的应用都依赖于框架包的共享实例,如下图所示。

应用如何访问Windows 应用 SDK框架包的关系图

当为Windows 应用 SDK框架包的新版本提供服务时,所有依赖框架的应用都会更新到新版本,而无需重新分发副本。 Windows 在最新版本框架发布后更新到最新版本,应用将在重新启动期间自动引用最新的框架包版本。 旧框架包版本不会从系统中删除,除非它们不再运行或被系统上的应用主动使用。

应用如何获取Windows 应用 SDK框架包更新的关系图

由于应用兼容性对于 Microsoft 和依赖于 Windows 应用 SDK 的应用非常重要,因此 Windows 应用 SDK 框架包遵循语义版本控制 2.0.0 规则。 这意味着,在发布 Windows 应用 SDK 版本 1.0 后,Windows 应用 SDK 框架包将保证次要版本和修补程序版本更改之间的兼容性,并且中断性变更只会在主要版本更新之间发生。

单一实例包

单一实例包可确保单个长时间运行的进程可以处理跨多个应用使用的服务,它们可能在不同版本的 Windows 应用 SDK 上运行。

若要为使用版本低于 20H1 的 Windows 的未打包应用和已打包 Win32 应用启用推送通知,需要 Windows 应用 SDK 单一实例,现有 UWP PushNotificationTriggerToastNotificationActionTrigger 类无法支持。 框架包无法支持的未来Windows 应用 SDK功能将添加到单一实例包。

对未打包应用的其他要求

引导程序

引导程序是一个库,必须包含在打包的外部位置或未打包的应用中。 它提供引导程序 API, (请参阅将Windows 应用 SDK运行时用于使用外部位置打包的应用或未打包) ,这使未打包的应用能够执行以下重要任务:

  • 为 Windows 应用 SDK 框架包初始化动态依赖项生存期管理器 (DDLM)。
  • 查找 Windows 应用 SDK 框架包,并加载到应用的包图中。

为了完成这些任务,nuget 包利用模块初始值设定项来为你连接引导程序。 只需在项目文件中设置 <WindowsPackageType>None</WindowsPackageType> 即可。 在高级方案中,如果要控制初始化,可以直接在应用的启动代码中调用引导程序 API, (请参阅教程:在使用外部位置打包的应用中使用引导程序 API,或使用Windows 应用 SDK) 的未打包应用,以便它可以正确初始化未打包应用的系统。 应用必须先使用引导程序 API,然后才能使用 WinUI、应用生命周期、MRT 核心和 DWriteCore 等Windows 应用 SDK功能。

Windows 应用 SDK 1.0 版本中的引导程序库包括:

  • Microsoft.WindowsAppRuntime.Bootstrap.dll(C++ 和 C#)
  • Microsoft.WindowsAppRuntime.Bootstrap.Net.dll(C# 包装器)

动态依赖项生存期管理器 (DDLM)

DDLM 的用途是防止在 Windows 应用 SDK 框架包被未打包应用使用时提供该服务。 它包含一个服务器,引导程序必须在应用启动初期初始化该服务器,以提供该功能。

Windows 应用 SDK 框架包的每个版本和体系结构都有一个 DDLM。 这意味着在 x64 计算机上,你可能同时具有 x86x64 版本的 DDLM 来支持这两种体系结构的应用。

其他需求