Skip to content

商店踩坑 #1:我的应用依赖装了一个幽灵开始菜单条目

2026-05-28

标签:Windows · MSIX · Microsoft Store · 商店踩坑


把 Windows 应用发布到 Microsoft Store 并不总是一帆风顺。这个系列记录了我在实际中遇到的各种坑——每篇一个,简短实用。

这是第一篇。

背景

RDP Heartbeat 最初是用 Python + Tkinter 写的小工具——屏幕角落的一个呼吸灯,用来告诉你 RDP 会话是不是还活着。能用是能用,但把 Python 桌面应用打包上架 Microsoft Store 可真是一波三折:Python 源码 → PyInstaller exe → Inno Setup 安装包 → MSIX 包。我们专门写了篇文章记录整个过程。

所以我用原生 WinUI 3Windows App SDK 2.0.1 从头重写了它。走原生路线本该一帆风顺——再也不用折腾 Python 打包了。确实如此,直到提交到商店认证。

"通过,但需要修改"

认证结果回来了:

Status: Pass with required fix

10.1.1.11 On Device Tiles: Your submission installs multiple components to the device. Please make sure the additional installed components that are visible in the Start Menu have a unique name that clearly identifies which item is the main product.

通过了——但带了个警告。开始菜单里多出了个什么东西,而且那不是我的应用。

幽灵条目

认证报告说开始菜单里多了一个东西。我一看——说实话,没什么异常。我的开始菜单完全符合预期,没有多余的磁贴。

我把整个项目过了一遍:检查了包清单、查看了构建输出、跟其他已上架的应用做了对比。没有多余的包,没有可疑的扩展,一切都正常。

但有一个区别。我的其他应用——EnvStudioGhostWinQuickGUID——都用的 Windows App SDK 1.8.x。只有 RDP Heartbeat 用的是 SDK 2.0.1。这是唯一的变化变量。

WinUI 3 应用依赖 Windows App SDK 运行时,它以 MSIX 包的形式作为共享系统依赖安装。我唯一能怀疑的就是 SDK 2.x 运行时——不知为何,在微软的测试环境(但不是在我的机器上),它的部署产生了一个可见的开始菜单磁贴。具体原因,我也不清楚。

你能怎么办?

最让人头疼的部分来了:你没法直接修复它。运行时包是微软出的——你完全无法控制它们在开始菜单里的呈现方式。

实际可行的方案:

  1. 接受它并做好说明——在商店提交说明中加一条备注,解释多出来的磁贴是微软提供的运行时依赖,不是独立产品。我就是这么做的,认证通过了。
  2. 改用独立部署——在 .csproj 中设置 <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>,把运行时直接打包进你的应用包。这样完全消除了 DEPN,但每个架构会增加约 40 MB 的下载体积。

小结

如果你在用 Windows App SDK 2.x 开发上架 Microsoft Store 的应用:

  • 注意运行时依赖可能会创建一个可见的开始菜单磁贴
  • 这是 2.x 运行时的副作用,不是你应用的 Bug
  • 在提交说明中写清楚这一点,避免认证被耽搁
  • 如果无法接受幽灵条目,独立部署是最干净的解决方案

本文属于商店踩坑系列。