Windows 应用:打包、部署和处理
注意
一些信息与预发布产品相关,在商业发行之前可能发生实质性修改。 Microsoft 对此处提供的信息不提供任何明示或暗示的保证。
本主题讨论以下方面的选项:
- 应用是否会打包。
- 如何部署/分配应用以及应用的安装方式。
- 应用的运行时处理(隔离程度):以及哪些 API 适用。
可以为新应用和现有应用做出这些决策。 但是,如果你仍处于新应用的规划阶段,那么在开始考虑上述注意事项之前,请先确定应用要使用的开发平台和用户界面 (UI) 框架。 有关此决策,请参阅 Windows 开发选项概述。
打包或未打包
应用打包还是未打包的决策首先由称为“程序包标识符”的概念决定,我们将在本节中进行介绍。 如果不需要,则决策取决于你自己和用户所需的安装程序体验。 让我们深入了解这些内容的详细信息。
仅当应用在运行时具有程序包标识符时,该应用才能使用后台任务、通知、实时磁贴、自定义上下文菜单扩展和共享目标等多项 Windows 扩展性功能。 这是因为,操作系统 (OS) 需要能够识别相应 API 的调用方。 请参阅需要包标识的功能。
- 如果需要使用上述任何功能,则应用需要程序包标识符。 因此,应用必须打包(打包的应用是唯一具有程序包标识符的类型)。 打包的应用是使用 MSIX 技术打包的(请参阅什么是 MSIX?)。
- 对于新应用,打包过程很简单(本节的末尾提供了有关如何执行此操作的信息)。
- 对于某些现有应用,可以遵循与新应用相同的打包过程。 但是,由于一些现有应用尚未准备好使其所有内容都存在于 MSIX 包中,因此你的应用可以使用外部位置打包。 这使你的应用能够具有程序包标识符;从而能够使用需要它的功能。 有关详细信息,请参阅使用外部位置进行打包以授予程序包标识符。
- 即使不需要使用其中任何功能,创建打包的应用仍是个好办法。 打包为用户提供安装、卸载和更新应用的简便方法。 有关详细信息,请参阅本主题中的部署/分配/安装。
- 但是,创建未打包的应用是一个选项。
简而言之,打包的应用是唯一具有程序包标识符的应用类型(并且提供最佳的安装体验)。 未打包的应用没有程序包标识符;因此,它无法使用上文提及的 API/功能。
有关打包与未打包的更多详细信息,请参阅部署概述,尤其是该主题中的“打包应用的优点和缺点”一节。 该主题还提及了“使用外部外置打包”选项。
有关如何将应用配置为打包或未打包的信息,请参阅:
- WinUI 3 应用(Windows 应用 SDK)。 请参阅项目属性中的
AppxPackage
Visual Studio 项目属性;另请参阅创建第一个 WinUI 3(Windows 应用 SDK)项目。 - 桌面应用。 请参阅设置用于 MSIX 打包的桌面应用。
- 通用 Windows 平台 (UWP) 应用。 UWP 应用已配置为打包,此配置无法更改。
另请参阅本主题中的 Windows 程序包管理器和 WinGet 客户端部分。
部署/分配/安装
- 打包的应用是使用 MSIX 技术打包的。
- 还使用 MSIX 安装打包的应用。 但是,如果选择“使用外部位置进行打包”,可以将其视为“自带安装程序”模型。 因此,将需要使用该选项执行一些安装程序工作。 有关详细信息,请参阅使用外部位置进行打包以授予程序包标识符。
- 未打包的应用完全不涉及 MSIX。
那么,为什么应用是否打包很重要?
- MSIX 为用户提供安装、卸载和更新应用的简便方法。 卸载是干净的,卸载应用后,系统将还原到安装前的相同状态,不会留下任何项目。
- 这种应用还支持增量更新和自动更新。
- Microsoft Store 针对这种应用进行了优化(但这种应用可以在 Microsoft Store 内外使用)。
- 这是通过 MSIX 应用附加(适用于 Azure 虚拟桌面虚拟机)使用的简单方式。 有关详细信息,请参阅什么是 MSIX 应用附加?。
- 签名包受益于强大的防篡改功能。 此优势甚至大于在“程序文件”下安装的未打包应用。
另请参阅本主题中的 Windows 程序包管理器和 WinGet 客户端部分。
AppContainer 或中等 IL
选择是否在 AppContainer 中运行应用是一个安全问题。 AppContainer 应用的进程及其子进程在轻量级应用容器中运行,其中它们只能访问专门授予它们的资源。 使用文件系统和注册表虚拟化对它们进行隔离。 因此,在 AppContainer 中实现的应用无法受到黑客攻击,不会允许在有限分配的资源之外执行恶意操作。
打包或未打包的应用可以配置为在 AppContainer 中运行。 但是,对于打包的应用,此过程更为简单。 如果某个应用不是 AppContainer 应用,则它是“中等 IL”应用。
有关详细信息,请参阅旧应用的 AppContainer 和 MSIX AppContainer 应用。
有关如何将应用配置为在 AppContainer 或中等 IL 中运行的信息,请参阅:
- WinUI 3 应用(Windows 应用 SDK)。 请参阅为 AppContainer 配置 WinUI 3 项目中的
uap10:TrustLevel
应用包清单属性。 - 桌面应用。 请参阅 MSIX AppContainer 应用中的
TrustLevel
Visual Studio 项目属性(在适合你的应用类型的章节中)。 - 通用 Windows 平台 (UWP) 应用。 UWP 应用已配置为在 AppContainer 中运行,此配置无法更改。
请记住,未打包的应用没有应用包清单。 因此,对于未打包的应用,可以在项目文件而不是应用包清单中声明 AppContainer-or-Medium-IL 决策。
Win32 应用隔离
重要
本节中所述的功能在 Windows Insider Preview 的预发行版本中提供。
Win32 应用隔离是 Windows 中即将推出的安全功能,如果应用遭到入侵,此功能可以帮助遏制损害并保护用户隐私选择。 此功能基于 AppContainers 和某些组件,这些组件可虚拟化资源并提供对其他资源的中转访问。 有关用于隔离应用的文档和工具,请参阅欢迎使用 Win32 应用隔离存储库。
应用功能
应用功能(例如 internetClient、位置、麦克风和蓝牙)主要与 AppContainer 中运行的打包应用相关。 这些打包应用包括所有通用 Windows 平台 (UWP) 应用和部分桌面应用。
但在某些情况下,中等 IL 应用(即不是 AppContainer 应用的应用)也应该声明功能。 举个例子,runFullTrust 受限功能。
有关应用功能、适用的应用类型以及如何配置应用功能的详细信息,请参阅应用功能声明。 功能在应用包清单中进行配置,因此这些功能仅适用于打包的应用。
应用类型
桌面应用和通用 Windows 平台 (UWP) 应用是两种主要应用类型,尽管桌面应用系列中有多种类型的应用。 选择用户界面 (UI) 框架(WinForms、WPF、Win32、Direct 2D/3D、UWP 或 WinUI 3)是一种选项,在某种程度上与本主题中所述的配置无关。
不过,我们来看看这些应用类型在打包、部署和处理方面互相之间有何不同。
首先,所有 UWP 应用都是打包应用,并在 AppContainer 中运行。 但对于桌面应用,情况更加灵活。 可以选择打包桌面应用,也可以不打包。 并且,无论如何决策,都可以选择将桌面应用配置为 AppContainer 应用或中等 IL 应用。
已打包 | 未打包 | |
---|---|---|
AppContainer | 桌面应用 UWP 应用 |
桌面应用 |
中等 IL | 桌面应用 | 桌面应用 |
对于打包的应用,若要配置所需的应用类型,请使用应用包清单中的 uap10:RuntimeBehavior
属性(请参阅应用程序 (Windows 10))。
- 桌面应用是 Windows
.exe
,通常带有 main 或 WinMain 入口点函数。 若要将应用配置为桌面应用,请将uap10:RuntimeBehavior
设置为“packagedClassicApp”或“win32App”。- 值“packagedClassicApp”表示 WinUI 3 应用(Windows 应用 SDK)或桌面桥应用 (Centennial)。 区别在于 Centennial 应用在 AppContainer 中运行。
- “win32App”表示任何其他类型的 Win32 应用(包括使用外部位置打包的应用)。
- 最后,将
uap10:RuntimeBehavior
设置为“windowsApp”可得到 UWP 应用。
有关可开发的应用类型的所有选项,请参阅 Windows 应用开发:选项和功能。
Windows 应用 SDK - 依赖于框架或独立
如果要开发或维护使用 Windows 应用 SDK 的应用,则需要做出进一步的决策。 因为有以下两种方式可以部署应用所依赖的 Windows 应用 SDK:
- 依赖于框架(默认)。 应用需要在目标计算机上拥有 Windows 应用 SDK 运行时和/或框架包。
- 独立。 应用随附其 Windows 应用 SDK 依赖项。
有关详细信息,请参阅 Windows 应用 SDK 部署概述。
Windows 程序包管理器和 WinGet 客户端
程序包管理器可以通过自动执行工作流来帮助用户安装/升级/配置软件。 程序包管理器可以帮助安装任何软件,但它们往往主要用于安装开发人员工具。 因此,如果要构建开发人员工具,你可能会对此选项特别感兴趣。 但其工作原理如下:
- 作为软件开发人员,你向程序包管理器(以声明性说明的形式)定义成功安装产品所必要的所有部件。
- 然后,当用户安装软件时,程序包管理器按照声明性说明自动执行安装和配置工作流。
结果是缩短了用户环境就绪的时间,并提高了所安装组件之间的兼容性。 可以使用 Windows 程序包管理器以 .msix
、.msi
和 .exe
等格式分发打包的或解压缩的应用。
有关详细信息,请参阅 Windows 程序包管理器。