wingetmsitroubleshootingreferenceerrors

winget MSI Exit Codes Decoded (1603, 1618, 1638, and more)

Every MSI exit code winget shows: 1603, 1618, 1638, 3010, and 22 more. What each means and how to fix it.

· 6 min read · updated May 29, 2026
winget MSI Exit Codes Decoded (1603, 1618, 1638, and more)

When winget install fails, the error message often ends with "Installer failed with exit code: 1603" or similar. That's not winget's code — it's the MSI installer's. Here's every common MSI exit code, what it means, and how to fix it.

Quick reference table

Code Meaning What to do
0 Success
1602 User cancelled Re-run, click through prompts
1603 Fatal error during install See detailed section
1605 Action only valid for installed products Try uninstall first
1612 Installation source unavailable Re-download / network issue
1618 Another install in progress See fix
1619 Package could not be opened Corrupted download
1620 Package could not be opened (path) Bad path
1622 Error opening log file Pick writable log path
1623 Language not supported Install English version
1624 Error applying transform Bad MST file
1625 Disallowed by policy Group Policy blocking
1626 Function failed during execution Generic — retry
1627 Function failed during initialisation Reinstall MSI engine
1628 Invalid table Corrupted MSI
1629 Wrong data type Bad MSI
1630 Wrong data Bad MSI
1631 Service failed to start Restart msiserver
1633 Not supported on this platform OS mismatch
1638 Different version already installed See detailed section
1639 Invalid command line Check installer args
1640 Cannot install from terminal services Use direct console
1641 Reboot required Success — reboot
1642 Patch package not applicable Wrong patch for installed version
1643 Patch removal not supported Manual rollback
1644 One or more customisations not applicable Bad transform
1645 Patch package not signed Cert chain issue
1646 Patch removed Success after rollback
1648 No valid patch sequence Patch ordering issue
1649 Patch removal disallowed Vendor restriction
1650 XML patch data invalid Bad XML
1651 Admin patch upgrade error Network share issue
1652 Operation failed Generic
1653 UI is paused Click through prompts
1654 Setup quit User abort mid-setup
3010 Reboot required Success — reboot
3011 Reboot initiated Success — reboot

The five you'll actually encounter

1603 — Fatal error during installation

The catch-all "something went wrong." Could be a hundred different causes. Diagnose:

  1. Re-run with verbose log:
winget install --id <ID> --log "$env:TEMP\winget.log" --verbose

Open winget.log and search for Error near the bottom.

  1. Common 1603 root causes:
  • Antivirus blocking installer extraction
  • Missing prerequisite (e.g. .NET version, VC++ runtime)
  • Insufficient disk space (check Get-PSDrive C)
  • Permission issue on TEMP folder
  • Conflicting product already installed
  1. Quick fixes to try:
# Clear TEMP
Remove-Item "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue

# Repair Windows Installer
sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

# Restart Installer service
Restart-Service msiserver

Then retry winget.

1618 — Another installation in progress

MSI lock contention. See Another installation in progress fix.

TL;DR: wait 2 min, kill stuck msiexec.exe, or reboot.

1638 — Different version is already installed

You're trying to install version X, but version Y is on the machine. The MSI refuses to "downgrade" or "side-install":

Option A — uninstall first, then install:

winget uninstall --id <ID>
winget install --id <ID>

Option B — use --force to override (works for some apps):

winget install --id <ID> --force

Option C — upgrade instead of install (if X > Y):

winget upgrade --id <ID>

3010 / 1641 — Reboot required (success!)

These aren't errors despite the non-zero code. The install completed but Windows wants a restart to finalise (file replacement locked, kernel-mode driver, etc.).

shutdown /r /t 0

After reboot, the install is done.

To suppress reboot prompts in scripts:

winget install --id <ID> --override "/norestart"

The app will finish installing on next reboot.

1625 — Disallowed by policy

Group Policy is blocking the install. Common on corporate machines.

gpresult /h "$env:TEMP\gpo.html"
start "$env:TEMP\gpo.html"

Look for Windows Components → Windows Installer → Disable Windows Installer. If enabled, only IT can change it.

Workaround for personal apps: install per-user (--scope user) — this bypasses some machine-level policies.

How winget reports MSI codes

winget displays the code at the end of the install attempt:

Installing...
  ████████████████████  100%
Installer failed with exit code: 1603

The number is the MSI's return value. winget itself returns its own exit code (which may differ — e.g. winget exits 0x8A150029 when an installer fails with 1603).

Reading verbose logs

When stuck, the log file is your friend:

winget install --id <ID> --log "$env:TEMP\winget.log" --verbose

Open and search for:

  • MSI (s) — installer-side messages
  • MSI (c) — client-side messages
  • Error — actual errors
  • Action ended — what was running when it failed

Often the line right before "Error" tells you exactly what step failed.

Common 1603 root causes (in priority order)

  1. Missing .NET runtime — install required version first
  2. Antivirus interference — disable briefly, retry
  3. Stale .NET install cachedism /online /cleanup-image /restorehealth
  4. Permission on %TEMP% or %LOCALAPPDATA%\Tempicacls $env:TEMP /reset
  5. Disk space — need at least 2× installer size in TEMP + final location
  6. Conflicting old version — uninstall first
  7. MSI engine itself brokenmsiexec /unregister && msiexec /regserver

If verbose logs don't help, try installing manually (download installer, run directly). Same error confirms it's not a winget issue; different behaviour means winget's calling pattern is the culprit.

Skip the diagnostic dance
winget.tech curates apps that install cleanly — fewer MSI surprises.
Browse packages →

What's next?

Continue reading