MSIX on Windows 10 and Windows 11

MSIX 同时适用于Windows 10和Windows 11,但并非所有功能都可用于这两种功能。 Windows 11引入了多项功能,但尚未向后移植,一些Windows 10 bug 仍未解决。 此页面可帮助你了解哪些工作原理,以便在需要支持Windows 10时做出明智的打包决策。

重要

Windows 10主流支持于 2025 年 10 月 14 日结束(所有非 LTSC 版本)。 Windows 10 LTSC 2021 受支持,直到 2027 年 1 月 12 日。 如果目标受众仍在使用 Windows 10,请据此做好计划,因为在较旧版本的 Windows 10 上不太可能修复功能错误。

功能比较:Windows 10与Windows 11

下表比较了最新Windows 10版本(22H2(与 21H2 相同的功能支持)和Windows 11之间的 MSIX 功能可用性。

功能 Windows 10 (22H2) Windows 11
核心 MSIX 安装和卸载
应用安装程序文件(.appinstaller)支持
旁加载 (非应用商店安装) AllowAllTrustedApps需要策略或开发人员模式 ✅ 默认启用
MSIX 中的Windows服务 ✅(需要 Windows 10 版本 2004 或更高)
具有外部所在位置的软件包(稀疏包) ✅(需要 Windows 10 版本 2004+)
托管的应用 ✅(需要 Windows 10 版本 2004+)
软件包完整性实施(非商店) ✅(需要 Windows 10 版本 2004+)
灵活虚拟化 ✅(需要Windows 10版本 21H1+)
开始菜单组 ✅(需要Windows 10版本 21H1+)
修改软件包
包支持框架 (PSF)
共享包容器 仅限 ❌ Windows 11
旧版上下文菜单支持(Shell 扩展) 仅限❌ Windows 11
可变包目录 仅限 ❌ Windows 11
MSIX 持久标识(重新安装后仍存在) 仅限 ❌ Windows 11
动态依赖项 受支持的 Windows 应用 SDK 版本,通过 Windows 应用 SDK 动态依赖项 API(Mdd* / bootstrapper),❌ OS 本机 API ✅ 通过 Windows 应用 SDK; Windows 11 版本 22H2+ 上可用的 OS 本机 API

有关所有Windows 10版本的完整版本细分,请参阅 MSIX 功能和受支持的平台

Windows 11 专有功能

如果应用使用以下任何功能,则它不适用于Windows 10:

共享包容器

共享包容器允许多个打包的应用共享一个通用包命名空间,从而允许它们共享数据和设置。 此功能需要Windows 11。

Windows 10 alternative: 使用 MSIX 容器外部的共享 Win32 数据位置(如 %ProgramData% 或命名管道),或将应用重新构造为单个捆绑包中的相关包。

旧版上下文菜单支持

Windows 11引入了注册 MSIX 打包的 Shell 扩展(右键单击上下文菜单)的支持,这些扩展显示在经典上下文菜单中。 这主要与将旧版桌面应用转换为 MSIX 时相关。

Windows 10 备用方案: 使用包支持框架(PSF)或通过单独的 Win32 安装程序在 Windows 10 上提供上下文菜单扩展功能。

可变包目录

可变包目录允许应用写入安装位置中的子目录,而不是虚拟化容器。 需要Windows 11。

Windows 10 alternative: 写入到 ApplicationData.Current.LocalFolder (AppData\Local\Packages...\LocalState) 或包外部的位置。

MSIX 永久性标识

MSIX 持久标识可确保应用包的身份标识(系列名称、发布者等)在卸载后能够保持,并在重新安装时继续存在。 没有它,卸载应用时 LocalState 中的数据会被删除。 需要Windows 11。

Windows 10 alternative: 将持久性数据存储在包容器之外,例如在 %APPDATA%%LOCALAPPDATA%(Packages 文件夹外)或 %ProgramData% 中的数据库中。

动态依赖项

动态依赖项允许打包应用对未在打包时声明的框架包采用运行时依赖项。 这是Windows 应用 SDK对未打包应用的支持的基础机制。 Windows 应用 SDK 动态依赖项 API(包括 Mdd* API 和引导程序流)在支持 Windows 应用 SDK 的 Windows 10 和 Windows 11 上均受支持。 Windows 11 版本 22H2 及更高版本上还提供了单独的操作系统原生动态依赖项实现。

Windows 10 guidance: 使用Windows 应用 SDK动态依赖项 API 或引导程序处理Windows 10上的依赖项解析,无需解决方法。

特定于Windows 10的注意事项

旁加载策略

在 Windows 10 2004及更高版本上,通常可以通过双击来安装已签名的非来自商店的 MSIX 包,而无需单独启用旁加载。 在较旧的Windows 10版本(2004 年之前),必须通过开发人员模式或 AllowAllTrustedApps 组策略启用旁加载。

无论Windows版本如何,例外都适用:未签名的包需要额外的信任配置,企业托管设备可以通过策略限制或禁用非应用商店应用安装。

在 Windows 11 中,默认情况下,标准签名包也启用了旁加载功能,但仍受相同的政策限制。

LTSC 2021 功能限制

Windows 10 LTSC 2021(内部版本 19044,相当于 20H2)缺少在 Windows 10 21H1 及更高版本中添加的功能:

功能 LTSC 2021 Windows 10 21H1+
灵活虚拟化
开始菜单组

如果企业部署面向 LTSC 2021,请不要依赖于灵活的虚拟化或打包的开始菜单组。

Windows 10上未解决的问题

Windows 10上报告的一些 MSIX 问题尚未向后移植,在Windows 10支持终止状态的情况下不太可能修复。 如果您在 Windows 10 上遇到与 Windows 11 不同的 MSIX 行为,请检查 microsoft/msix-packaging 存储库中未解决的问题。

已知Windows 10特定问题的常见类别包括:

  • 注册表虚拟化边缘案例
  • 应用安装程序在特定网络配置下的可靠性
  • 打包工具与某些安装程序类型的兼容性

Windows 10目标的打包工具包

如果要打包应用以Windows 10并遇到工具兼容性问题,则几个社区打包工具提供了其他兼容性解决方法:

  • MSIX 打包工具 (Microsoft) - 官方工具;积极维护
  • Advanced Installer - 具有强大Windows 10 MSIX 支持和良好维护的兼容性矩阵的商业工具
  • Conveyor 是一个社区工具,用于将多个目标(包括 MSIX)自动打包;如果你也在 macOS 或 Linux 上发布软件,该工具会非常有用。

这些工具可以在构建过程中缓解某些Windows 10的棘手问题,但运行时操作系统限制(例如缺少 Win11独有的API)在打包中无法解决。

建议

如果需要支持Windows 10:

  1. 避免仅限于 Windows 11 的功能 - 如果 MinVersion 面向 Windows 10,则不要使用共享包容器、可变包目录、持久性标识或动态依赖项。
  2. TargetDeviceFamily设置为要支持的最早Windows 10版本。
  3. 专门测试Windows 10 — Windows 10和Windows 11之间的行为差异在仅支持Windows 11的CI管道中很少被捕获。
  4. 规划 Win10 EOL 策略- 主流Windows 10支持已结束,请考虑设置路线图,以便在未来的应用版本中要求Windows 11。