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

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

有两个主要选项可用于分发依赖于框架的应用:

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

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

关键术语

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

术语 定义
Windows 应用 SDK运行时 应用使用Windows 应用 SDK所需的 MSIX 包。 这些包包括:Framework、Main、Singleton 和 DDLM。 根据所使用的功能和应用部署方法,需要在目标计算机上设置一组这些包。
框架包 包含应用在运行时使用的二进制文件(大多数Windows 应用 SDK功能)。 该框架包含引导程序组件,使应用能够自动安装最新版本的Windows 应用 SDK,该版本将在常规发布节奏上更新。
主包 包含用于跟踪动态依赖项的后台任务的包,并支持从 Microsoft 商店自动更新框架包。
单一实例包 包含框架包中未包含的后台任务、服务、应用扩展和其他组件,例如推送通知。 通常,这是一个在应用之间进行协调的单一长期运行进程。
动态依赖生命周期管理包 (DDLM) 防止 OS 在带外部位置的打包应用或未打包应用正在使用时,对 MSIX 包执行服务更新。
Bootstrapper 供带外部位置的打包应用和未打包应用使用的应用本地二进制文件,可根据应用需要查找并加载最匹配的 Windows 应用 SDK 版本。
预配 在整个系统范围内对包进行暂存处理的过程,使该计算机上的任何用户都可以注册并使用这些包,而无需再为每台计算机重复进行暂存处理。 预配可以作为 OS 映像的一部分或在企业应用部署期间执行。
安装程序 指部署 Framework、Main、Singleton 和 DDLM 包的 .exe 安装程序。
MSIX 新式安装程序技术,使用户能够直接从 Microsoft 应用商店或网站安全地安装每个用户的应用。 在企业版或共享电脑上,可以通过 PowerShell 和 MDM 为所有用户安装应用。

框架包

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

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

应用如何访问Windows 应用 SDK框架包的示意图

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

应用获取 Windows 应用 SDK 框架包更新的示意图

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

单一实例包

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

Windows 应用 SDK 单例是必需的,以便为运行在低于 20H1 版本的 Windows 上的未打包应用和已打包的 Win32 应用启用 推送通知,因为现有的 UWP PushNotificationTriggerToastNotificationActionTrigger 类无法支持这些应用。 框架包无法支持的未来Windows 应用 SDK功能将添加到 Singleton 包。

未打包应用的其他要求

Bootstrapper

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

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

为了完成这些任务,NuGet 包利用 自动初始化器 为你设置引导程序。 只需在project文件中设置 <WindowsPackageType>None</WindowsPackageType>。 在高级方案中,如果想要控制初始化,可以直接在应用的启动代码中调用引导程序 API(请参阅 Tutorial:在打包到外部位置的应用中使用引导程序 API,或者解压缩使用 Windows 应用 SDK),以便它可以正确初始化未打包的应用的系统。 应用必须使用引导程序 API,然后才能使用 winUI 3、应用生命周期、MRT Core 和 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 计算机上,您可能同时拥有 DDLM 的 x86x64 版本,以支持这两种体系结构的应用程序。

其他需求

MSIX 部署流水线

将 MSIX 包添加到计算机时,部署引擎会通过三个阶段处理请求:

阶段 Scope 发生的情况
索引 每台计算机 分析包清单并记录元数据和预期安装路径
阶段 每台计算机 创建包目录、提取有效负载并应用 ACL
注册 按用户计 将暂存包与特定用户关联 - 创建“开始”菜单条目、文件类型关联和运行时数据

预配每台计算机只需执行一次;注册则针对每个用户分别进行。 这种分离允许为一个用户提供包(或将其删除),而不会影响其他用户。

注释

术语 安装 是非正式的 , 它不是 MSIX 部署引擎中的正式概念。 部署请求使用 PackageManager API 将操作(添加、阶段、注册、删除等)提交到部署队列。 有关完整说明,请参阅 Inside MSIX 博客上的没有“安装”,而是“Stage”和“Register” 一文。