MSIX 使用容器化模型将应用与系统的其余部分隔离开来。 与常规用途容器技术(如 Docker)不同,MSIX 容器不是虚拟机,不需要单独的 OS 映像。 相反,Windows在运行时重定向应用的文件系统和注册表活动,使应用保持独立,同时允许它们正常与其余Windows互操作。
本文介绍隔离模型、可用于打包应用的两个信任级别,以及此方法提供的好处。
什么是 MSIX 容器化,什么不是
安装 MSIX 包时,Windows将应用的文件置于受保护的位置(C:\Program Files\WindowsApps\),应用本身无法修改。 在运行时,Windows 为应用程序提供文件系统和注册表的 虚拟化视图:读取操作进入程序包的安装位置,而写入则重定向到每个用户特定的由 Windows 管理的位置。
这意味着:
- 应用安装文件在运行时永远不会修改。
- 应用程序状态是与应用程序的二进制文件分别存储的,这使得更新、修复、和卸载过程变得干净且可靠。
注释
MSIX 容器是Windows运行时功能,而不是单独的操作系统环境。 应用作为本机Windows进程运行 , 它只具有某些系统资源的虚拟化视图。
两个信任级别
打包的应用在两个信任级别之一运行,用于确定隔离程度:
完全信任(中等完整性)
完全信任应用使用与标准桌面应用相同的权限运行。 Windows 提供 包标识 和某些文件/注册表虚拟化,但应用程序仍可以直接访问大多数系统资源。
这是使用 MSIX 打包工具以及大多数 WinUI 3 桌面应用从 Win32 安装程序转换的应用的默认值。
AppContainer (部分信任)
AppContainer 应用在严格隔离的环境中运行。 进程及其子级只能访问显式授予的资源。 Windows使用文件系统和注册表虚拟化以及 AppContainer 安全边界强制隔离。
UWP 应用始终在 AppContainer 中运行。 桌面应用还可以通过在应用清单中声明它来选择加入 AppContainer。
小窍门
AppContainer 应用获得最强大的安全保证,但需要更多工作才能正确配置,尤其是对于依赖广泛系统访问的应用。 有关配置步骤,请参阅 MSIX AppContainer 应用 。
MSIX 容器化模型的优点
| 益处 | 说明 |
|---|---|
| 清理卸载 | 由于Windows单独跟踪所有应用状态,因此卸载 MSIX 包会删除所有应用文件、注册表项和系统更改,而无需剩余项目。 保留用户创建的文件。 |
| 可靠更新 | 应用二进制文件在运行时是只读的。 更新将以原子方式替换软件包,如有需要,可以回滚更新。 |
| 无注册表污染 | 注册表写入操作将从应用转移到每个用户的虚拟配置单元,而不是写入 HKEY_LOCAL_MACHINE。 这可以防止传统 Win32 安装程序常见的注册表蔓延。 |
| 安全隔离 | AppContainer 应用仅限于明确授予的资源,从而减少进程受损后的影响。 |
| 完整性执行 | Windows可以检测在运行时篡改包文件。 如果包被篡改,Windows阻止启动和触发修复。 请参阅 MSIX 包签名概述文档。 |
虚拟化范围
并非所有文件系统和注册表位置都虚拟化。 Windows根据所访问的位置应用不同的行为:
- 禁止写入 包安装文件,安装位置为只读。
- AppContainer 应用会阻止对 系统位置(例如
C:\Windows\)的写入操作。 - 写入 用户配置文件位置(例如
AppData)的操作会被重定向到 AppContainer 应用的每个包的位置,对于完全信任的应用则直接传递。 - 从 打包的 VFS 位置 进行读取时,会直接从包本身提供数据,使应用表现得如同已安装到传统位置(例如
C:\Program Files\)。
有关文件系统和注册表虚拟化工作原理的完整技术详细信息,请参阅
共享容器
默认情况下,每个 MSIX 包在其自己的独立容器中运行。 对于多个包需要共享运行时环境(例如主应用和自定义包)的企业方案,Windows支持共享包容器。 共享容器为一组定义的包提供彼此虚拟文件系统和注册表的合并视图。
这是一项仅限企业的功能,需要管理权限。 请参阅 共享包容器。
灵活虚拟化
从Windows 11开始,应用可以选择性地选择特定的文件系统文件夹或注册表项退出虚拟化,从而使这些位置对其他应用可见,并在卸载时保留它们。 这对于需要与其他应用共享配置或数据的应用非常有用,同时仍受益于 MSIX 打包。
请参阅 灵活虚拟化。
相关文章
了解打包的桌面应用如何在 Windows - MSIX AppContainer 应用
- 灵活虚拟化
- 共享软件包容器
- MSIX 包签名概述