Подводные камни Store #1: Зависимость моего приложения установила «фантомный» ярлык в меню «Пуск»
2026-05-28
Теги: Windows · MSIX · Microsoft Store · Подводные камни Store
Публикация приложений для Windows в Microsoft Store не всегда проходит гладко. Эта серия документирует реальные подводные камни, с которыми я столкнулся — по одному на пост, кратко и по делу.
Вот первый из них.
Предыстория
RDP Heartbeat начинался как инструмент на Python + Tkinter — крошечная пульсирующая точка, показывающая, активен ли ваш RDP-сеанс. Он работал, но упаковка десктопного приложения на Python для Microsoft Store стала настоящей сагой: исходный код Python → exe через PyInstaller → установщик Inno Setup → пакет MSIX. Мы описали весь этот путь.
Поэтому я переписал приложение с нуля на нативном WinUI 3 с использованием Windows App SDK 2.0.1. Нативный путь должен был быть простым — никаких больше акробатических трюков с упаковкой Python. Так и было, вплоть до сертификации в Store.
«Пройдено с обязательным исправлением»
Пришёл результат сертификации:
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.
Пройдено — но с предупреждением. Что-то лишнее появилось в меню «Пуск», и это было не моё приложение.
Фантомная запись
В отчёте о сертификации говорилось, что в меню «Пуск» появилось что-то лишнее. Я посмотрел — и, честно говоря, ничего необычного. Моё меню «Пуск» выглядело именно так, как ожидалось, без лишних плиток.
Я проверил весь проект: просмотрел манифест пакета, изучил выходные данные сборки, сравнил с другими моими приложениями в Store. Никаких лишних пакетов, никаких подозрительных расширений, ничего не бросалось в глаза.
Но было одно отличие. Мои другие приложения — EnvStudio, GhostWin, QuickGUID — все используют Windows App SDK 1.8.x. RDP Heartbeat — единственное приложение на SDK 2.0.1. Это единственная изменившаяся переменная.
Приложения WinUI 3 зависят от runtime Windows App SDK, который распространяется в виде пакетов MSIX, устанавливаемых как общие системные зависимости. Единственный подозреваемый, на которого я могу указать — это runtime SDK 2.x: каким-то образом, в тестовой среде Microsoft (но не на моей машине), его развёртывание создаёт видимую плитку в меню «Пуск». Почему именно — не знаю.
Что с этим можно сделать?
И вот самая раздражающая часть: вы не можете это напрямую исправить. Пакеты runtime созданы Microsoft — у вас нет контроля над тем, как они отображаются в меню «Пуск».
Ваши практические варианты:
- Принять и задокументировать — Добавьте примечание к отправке в Store, объясняющее, что дополнительная плитка — это зависимость runtime от Microsoft, а не отдельный продукт. Именно так я и поступил, и сертификация прошла.
- Перейти на автономное развёртывание — Встройте runtime непосредственно в пакет приложения, установив
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>в вашем.csproj. Это полностью устраняет DEPN, но добавляет ~40 МБ на каждую архитектуру к размеру загрузки.
Вывод
Если вы разрабатываете с использованием Windows App SDK 2.x для Microsoft Store:
- Имейте в виду, что зависимость runtime может создать видимую плитку в меню «Пуск»
- Это побочный эффект runtime 2.x, а не баг в вашем приложении
- Задокументируйте это в примечаниях к отправке, чтобы избежать задержек сертификации
- Если фантомная запись неприемлема, автономное развёртывание — самое чистое решение
Часть серии Подводные камни Store.