Automatic Updates on Windows

Goal

Windows users receive newer builds without manually hunting installers.

Why

Automatic updates.

Pick a primary path

Path When to use

Microsoft Store / MSIX

You can meet Store policies; want OS-managed updates

winget-upgradable installer

Classic desktop app; you already ship MSI/EXE; want discovery in winget

In-app updater

Need fast channels, multiple tracks, or non-Store distribution with guided UX

Combining winget (install/discover) with in-app updates (speed) is common.

In-app updater checklist

  1. Publish a versioned update feed (JSON/YAML/XML) from CI when you cut a release

  2. Code-sign installers and verify before apply

  3. Download to a staging directory; apply on restart

  4. Keep last-known-good when feasible

  5. Honor a disable switch for enterprise (UpdatePolicy=Disabled or env var)

  6. Show status on the About dialog

winget path

  1. Ship a stable, versioned installer URL per release

  2. Submit or PR manifests to microsoft/winget-pkgs (or your private source)

  3. Verify winget upgrade Your.Package works after publish

Pitfalls

  • Updating while files are locked — schedule swap on restart

  • Per-machine install updated by a per-user process — align install scope

  • Unsigned downloads — SmartScreen and enterprise policy will block you