Skip to content

Microsoft Store MSIX

knoxxr edited this page Jul 14, 2026 · 1 revision

Microsoft Store (MSIX)

The app can ship to the Microsoft Store as an MSIX, packaged as a full-trust Win32 desktop app (EntryPoint=Windows.FullTrustApplication). SendInput key synthesis, global hotkeys, and the virtual-desktop registry reads all work exactly as in the plain-exe build.

Everything lives in packaging/msix/.

What differs in the packaged build

The same binaries ship through both channels; behaviour that must differ is chosen at runtime via Services/PackageContext.cs (IsPackaged, using GetCurrentPackageFullName):

Concern Plain-exe build MSIX / Store build
Updates GitHub Releases self-update Disabled — the Store updates the app
Run at startup HKCU\…\Run registry value windows.startupTask via the StartupTask API

The GitHub "Check for updates" tray item and Settings button are hidden when packaged.

One-time: fill in the identity

Package.appxmanifest ships with PLACEHOLDER identity so it builds locally. Before your first submission, replace three values with those from Partner Center ▸ your app ▸ Product management ▸ Product identity:

Manifest location Partner Center field
Identity/@Name Package/Identity/Name
Identity/@Publisher (CN=…) Package/Identity/Publisher
Properties/PublisherDisplayName Package/Properties/PublisherDisplayName

No code-signing certificate is needed — the Store re-signs the package on ingestion. (A cert is only required to sideload the .msix for local testing.)

Build the package

CI (recommended): Actions tab → Build MSIX (Store) → Run workflow → enter the version (e.g. 1.3.2). Download the .msix from the run's artifacts.

Locally:

pwsh packaging/msix/build-msix.ps1 -Version 1.3.2

Regenerate the logo assets (only if the icon design changes):

pwsh packaging/msix/generate-assets.ps1

Submit to the Store

  1. Reserve the app name in Partner Center (once) and fill in the three identity values above.
  2. Build the .msix (CI or local).
  3. Partner Center → new submission → Packages → upload the .msix.
  4. Complete the listing (description, screenshots, a 300×300+ Store logo, privacy policy, age rating) and submit for certification.

Certification notes

  • Undocumented COM (IVirtualDesktopManagerInternal) is a runtime call automated cert is unlikely to flag, but it's a policy grey area and can break across Windows builds; the keystroke-stepping fallback keeps the app working if it fails.
  • runFullTrust is a restricted capability — allowed for Desktop-Bridge apps, but review may ask for justification: "full-trust Win32 app synthesizing the native desktop-switch shortcut and reading virtual-desktop state."
  • After packaging, verify: overlay pinning across desktops, %APPDATA% config read/write, and the startup-task toggle in Task Manager → Startup apps.

See packaging/msix/README.md for the authoritative details.

Clone this wiki locally