打包定义应用如何安装、更新和与Windows集成。 WinUI 3 应用默认打包,而许多桌面应用(如传统 Win32 应用程序)则运行未打包。 在 打包 或 解压缩 的应用之间进行选择会影响可以使用的功能、你依赖的部署模型以及客户获得的整体体验。
注释
生成新的 WinUI 3 应用? 默认情况下,已为你打包。 以下指南最适用于需要做出明确选择的开发人员,通常是在移植现有应用、部署到企业计算机或将Windows功能添加到最初未打包的应用时。
应用打包为何重要
打包的应用受益于全新安装模型、自动更新和对需要包标识的Windows功能的访问权限,包括后台任务、通知、上下文菜单扩展、共享目标和其他扩展点。 打包还有助于确保更简洁的部署、可靠的更新,并通过Microsoft Store和企业部署工具等渠道简化分发。
需要包标识的功能
这些 Windows 功能仅适用于具有包身份的应用:通过完整的 MSIX 打包或外部位置的打包(稀疏包)。
| 功能 | 说明 |
|---|---|
| 后台任务 | 当应用不在前台时运行代码, 例如,同步数据、处理下载或响应系统事件。 |
| Windows AI API(Phi Silica、OCR 等) | 访问设备 AI 功能,例如本地语言模型、文本识别和图像分析。 |
| 推送通知(WNS,Windows通知服务) | 通过Windows通知服务从云服务接收实时通知。 |
| 共享对象 | 让用户通过系统共享工作表直接将来自其他应用的内容共享到你的应用中。 |
| 自定义上下文菜单扩展 | 将应用的操作添加到文件资源管理器和其他 shell 图面中的右键单击菜单。 |
| 文件类型和协议关联 | 将应用注册为特定文件类型或 URI 协议的处理程序(例如,yourapp://)。 |
| 启动任务 | 当用户登录Windows时自动启动应用。 |
| 应用服务 | 公开其他应用可以调用的后台服务,从而启用应用间通信。 |
小窍门
如果在调用 Windows API 时解压缩并遇到 E_ILLEGAL_METHOD_CALL 或 APPMODEL_ERROR_NO_PACKAGE 错误,则这是包标识要求。 将 打包与外部位置(稀疏包装) 视为最低摩擦修复。
有关详细信息,请参阅 需要包标识的功能。
一目了然地打包模型
| 型号 | 包标识 | 安装程序 | 商店适用 | 最适用于 |
|---|---|---|---|---|
| 封装(MSIX) | ✅ 是 | MSIX 替换安装程序 | ✅ 是 | 新应用、应用商店发布、企业 MDM |
| 使用外部位置打包 | ✅ 是 | 现有安装程序 | ❌ 否 | 具有自己安装程序的现有应用程序,以及独立软件供应商(ISV) |
| 解压缩 | ❌ 否 | XCopy /脚本 | ❌ 否 | 内部工具、开发实用工具、简单方案 |
打包的应用 (MSIX)
打包的应用使用 MSIX,并且具有 包标识,这是许多 Windows 扩展点所必需的。 包标识允许Windows可靠地标识平台 API 的调用方,这就是为什么这些功能依赖于它的原因。
- 打包的应用通常在具有文件系统和注册表虚拟化的轻型应用容器中运行(请参阅 旧版应用的 AppContainer 和 MSIX AppContainer 应用)。
- 可以根据需要将应用配置为 不 在应用容器中运行。
- MSIX 用于打包和安装(请参阅什么是 MSIX?)。
使用外部位置存储打包(稀疏包)
使用外部位置(也称为 稀疏包)打包可将小型标识包与现有应用一起注册,而无需更改安装程序、二进制位置或更新过程。 它已在 Windows 10 版本 2004(内部版本 19041)中引入。
对于通过其自己的安装程序(如 NSIS、WiX、InstallShield 等)交付且不打算替换为 MSIX 的现有 Win32/WPF/WinForms 应用来说,这是一个最佳选择。 注册一个轻量级身份包,二进制文件保持在其原始位置,并解锁具有包标识约束的完整Windows功能集。
| 能力 | MSIX | 外部位置 |
|---|---|---|
| 替换安装程序 | 是的 | 否 |
| 包内的二进制文件 | 是的 | 否(外部) |
| 商店适用 | 是的 | 否 |
| 包标识 | 是的 | 是的 |
| 更新机制 | MSIX 更新 | 现有机制 |
未打包的应用
未打包的应用不使用 MSIX, 并且没有包标识,这意味着它们无法访问上面列出的功能。
- 在 API 接口、文件系统访问、注册表访问、权限提升和进程模型方面,它们仍然完全不受限制。
- 安装和更新依赖于
.exe、.msi、自定义安装程序、ClickOnce 或 xcopy 部署。
在决定使用未打包方案之前,请根据您的路线图检查上面的功能表。 如果通知、后台任务或 AI API 处于地平线上,请考虑开始打包。
按情景选择
| 情景 | 建议的模型 | 详细信息 |
|---|---|---|
| 独立开发人员发布至 Microsoft Store | 已打包 (MSIX) | 应用商店需要 MSIX。 WinUI 3 应用默认打包 - 无需更改。 → 分发打包的应用 |
| 通过 Intune 或 Configuration Manager 部署的企业应用 | 现有安装程序的打包文件或外部目录位置 | 新应用应使用 MSIX。 具有其自己的安装程序的现有应用可以使用与外部位置的打包。 → 部署打包的应用 |
| ISV 提供包含自身安装程序的直接下载 | 在外部位置进行数据打包 | 将轻型标识包与现有安装程序一起注册。 用户看不到任何更改;你将获得Windows功能。 → 授予包标识 |
| 内部工具或开发人员实用工具 | 未包装的 | 最简单的构建和部署。 Windows 应用 SDK通过 NuGet 工作,但某些功能不可用。 |
依赖于框架的部署与自包含部署
与打包模型分开,使用Windows 应用 SDK的应用选择如何携带其运行时依赖项:
- 框架依赖:必须在用户的计算机上安装 Windows 应用 SDK 运行时。 较小的应用占用量;依赖于当前或自动安装的运行时。
- 自包含:所有Windows 应用 SDK二进制文件随应用一起提供。 占用空间较大;没有外部运行时要求。 适用于安全防护严密的企业环境。
→ 部署独立应用
开始了解 MSIX
如果生成 Win32 桌面应用(有时称为 classic 桌面应用)或.NET应用(包括Windows Presentation Foundation(WPF)和Windows 窗体(WinForms),则可以使用 MSIX 打包和部署应用。
其他安装技术
- 应用程序安装和服务
- Windows Installer
- .NET应用程序发布概述
- 部署.NET框架和应用程序
- 部署WPF应用程序
- Windows 窗体 的 ClickOnce 部署