依赖于框架的打包应用的 Windows 应用 SDK 部署指南

本文提供有关部署依赖于框架的打包应用(请参阅 什么是 MSIX?)的指南,这些应用使用 Windows 应用 SDK。 有关其他依赖于框架的打包选项的同类主题为依赖于框架的使用外部位置打包的应用或未打包应用的 Windows 应用 SDK 部署指南

Overview

默认情况下,在 Visual Studio 中使用 WinUI 3 模板之一创建项目时,项目配置为将应用程序构建为 MSIX 包,可以选择使用单项目 MSIX(请参阅 使用单项目 MSIX 打包应用)或 Windows 应用程序打包项目(请参阅 在 Visual Studio 中为 MSIX 打包设置桌面应用程序)。 然后,可以按照在 Visual Studio 中打包桌面或 UWP 应用中的说明为应用生成 MSIX 包。 为应用生成 MSIX 包后,可以使用多个选项 来管理 MSIX 部署

若要详细了解打包应用在使用 Windows 应用 SDK 时可能需要的包,请参阅 Windows 应用 SDK 的部署体系结构。 其中包括 FrameworkMainSingleton 包;这一切都由Microsoft签名和发布。 部署打包的应用有两个主要要求:

  1. 部署 Windows 应用 SDK 框架包
  2. 调用部署 API

Prerequisites

部署 Windows 应用 SDK 框架包

Windows App SDK 框架包包含运行时使用的 Windows 应用 SDK 二进制文件,并随应用程序一起安装。 框架对 Windows 应用 SDK 的不同通道有不同的部署要求。

稳定版本

在开发计算机上安装 Windows 应用 SDK NuGet 包的稳定发布版本(请参阅 稳定频道发行说明),并使用提供的 WinUI 3 项目模板之一创建项目时,生成的包清单包含一个 PackageDependency 元素,该元素指定了框架包的依赖项。

但是,如果使用单独的 Windows 应用程序打包项目手动生成应用包,则必须在文件中声明 Application (package).wapproj,如下所示:

<ItemGroup>
   <PackageReference Include="Microsoft.WindowsAppSDK" Version="1.0.1">
       <IncludeAssets>build</IncludeAssets>
   </PackageReference>
</ItemGroup>

该包依赖项可确保将应用部署到另一台计算机时安装框架包。

预览版

在你开发计算机上安装 Windows 应用 SDK NuGet 包的预览版本时(请参阅 预览频道发行说明),在生成时将 Windows 应用 SDK 框架包的预览版本作为 NuGet 包的依赖项进行部署。

调用部署 API

另请参阅 初始化 Windows 应用 SDK

部署 API 由 Windows 应用 SDK 框架包提供,可在 Microsoft.Windows.ApplicationModel.WindowsAppRuntime 命名空间中使用。 Windows 应用程序模型不支持声明对 Main 和 Singleton 包的依赖项。 因此,出于以下原因,需要部署 API:

  1. 为框架包中没有的功能(例如推送通知)部署 Singleton 包。
  2. 若要部署 Main 包,该包允许从 Microsoft 应用商店自动更新框架包。

对于 通过应用商店分发的打包应用,开发人员负责分发框架包。 建议调用部署 API,以便传递任何关键服务更新。 请注意,若要使用框架包外部的功能(例如推送通知),必须部署 Singleton 包(这可以通过部署 API 完成,或者通过使用你自己的安装方法重新分发 MSIX 包)。

Important

在 Windows 应用 SDK 版本 1.0 中,只有完全信任或具有 packageManagement 受限功能的打包应用才有权使用部署 API 安装 Main 和 Singleton 包依赖项。 对部分信任应用包的支持将在后面的版本中推出。

应在应用进程初始化后调用部署 API,但在应用使用使用 Singleton 包的 Windows 应用 SDK 运行时功能(例如推送通知)之前。 部署 API 的主要方法是 DeploymentManager 类的静态 GetStatusInitialize 方法。

  • GetStatus 方法返回当前加载的 Windows 应用 SDK 运行时的当前部署状态。 使用此方法确定在当前应用可以使用 Windows 应用 SDK 功能之前是否需要安装 Windows 应用 SDK 运行时包。
  • Initialize 方法验证当前加载的 Windows 应用 SDK 运行时所需的最低版本是否包含所有必需的包。 如果缺少任何包依赖项,该方法将尝试注册缺少的包。 从 Windows 应用 SDK 1.1 开始, Initialize 方法还支持强制部署 Windows 应用 SDK 运行时包的选项。 这会关闭 MainSingleton 运行时包的任何进程,从而中断其服务(例如,推送通知在此期间不会传递通知)。 应仅调用 Initialize 一次。 无需为通过 Visual Studio 中的启动而不调试启动调试命令部署的应用调用Initialize

Important

Visual Studio 属性 <WindowsAppSdkDeploymentManagerInitialize> 的默认值为 true. 因此,如果要显式调用 DeploymentManager.Initialize ,请在 Visual Studio 项目文件中设置 <WindowsAppSdkDeploymentManagerInitialize>false</WindowsAppSdkDeploymentManagerInitialize>

部署 API 示例应用

有关如何使用 DeploymentManager 类的 GetStatusInitialize 方法的其他指南,请浏览可用的示例应用。

地址安装错误

如果在安装 Windows 应用 SDK 运行时包期间部署 API 遇到错误,它将返回描述问题的错误代码。

例如,如果应用不完全信任,或者没有 packageManagement 受限功能,则会收到 ACCESS_DENIED 错误代码。 若要查看可能会遇到的其他错误代码及其可能的原因,请参阅 Windows 应用的打包、部署和查询疑难解答

如果错误代码不提供足够的信息,则可以在详细的事件日志中找到更多诊断信息(请参阅 获取诊断信息)。

如果遇到无法诊断的错误,请使用错误代码和事件日志在 WindowsAppSDK GitHub 存储库 中提出问题,以便我们可以调查问题。