Skip to content

ストアの落とし穴 #1:アプリの依存関係がゴーストスタートメニュー項目をインストールした

2026-05-28

タグ:Windows · MSIX · Microsoft Store · ストアの落とし穴


Windows アプリを Microsoft Store に公開するのは、いつも順調とは限りません。このシリーズでは、私が実際に遭遇した落とし穴を記録します——1 記事につき 1 つ、短く実用的に。

これが第 1 弾です。

背景

RDP Heartbeat は元々 Python + Tkinter で作られたツールでした——RDP セッションが生きているかを教えてくれる、画面の隅にある小さな呼吸ドットです。動いてはいましたが、Python デスクトップアプリを Microsoft Store 用にパッケージングするのは一苦労でした:Python ソース → PyInstaller exe → Inno Setup インストーラー → MSIX パッケージ。その全過程について記事を書きました

そこで、ネイティブ WinUI 3Windows 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 アプリと比較しました。余分なパッケージも、怪しい拡張機能も、目立つものは何もありませんでした。

でも一つ違いがありました。他のアプリ——EnvStudioGhostWinQuickGUID——はすべて Windows App SDK 1.8.x を使っていました。RDP Heartbeat だけが SDK 2.0.1 を使っています。これが唯一の変更点でした。

WinUI 3 アプリは Windows App SDK ランタイムに依存しており、これは共有システム依存関係としてインストールされる MSIX パッケージとして配布されます。私が指摘できる唯一の容疑者は SDK 2.x ランタイムです——なぜか、Microsoft のテスト環境では(私のマシンではありません)、そのデプロイメントが可視のスタートメニュータイルを生成しました。正確な理由はわかりません。

どうすればいいのか?

一番イライラする点はこれです:直接修正することはできません。ランタイムパッケージは Microsoft が作成したものです——スタートメニューでの表示方法を制御することはできません。

現実的な選択肢:

  1. 受け入れて説明を書く——Store 申告の備考に、余分なタイルは Microsoft 提供のランタイム依存関係であり、別製品ではないと説明を追加します。私がやったのはこれで、認証は通りました。
  2. 自己完結型デプロイメントに切り替える——.csproj<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> を設定し、ランタイムをアプリパッケージに直接バンドルします。これで DEPN は完全に消除されますが、アーキテクチャごとに約 40 MB ダウンロードサイズが増加します。

まとめ

Windows App SDK 2.x で Microsoft Store 向けアプリを開発している場合:

  • ランタイム依存関係が可視のスタートメニュータイルを作成する可能性があることに注意
  • これは 2.x ランタイムの副作用であり、アプリのバグではありません
  • 申告備考に明記して、認証の遅延を防ぐ
  • ゴースト項目が許容できないなら、自己完結型デプロイメントが最もクリーンな回避策

ストアの落とし穴」シリーズの一部。