winget runs forever, never finishes? "Downloading" stays at 0% for 10 minutes? Here are the 7 most effective fixes when winget hangs, freezes, or stalls.
Quick diagnostic
Which phase is it stuck on?
| Symptom | Likely cause | Jump to |
|---|---|---|
| Hangs at "Found X package(s)" | Catalog index stuck | Fix 1 |
| Stuck at "Downloading 0%" | Delivery Optimization issue | Fix 2 |
| Stuck mid-download | Network / CDN | Fix 3 |
| Hangs at "Installing..." | Installer waiting on input | Fix 4 |
| Hangs after install completes | Post-install cleanup | Fix 5 |
winget search hangs |
Source not responding | Fix 6 |
| Everything is slow | Antivirus interference | Fix 7 |
Fix 1 — Stuck at "Found X package(s)"
The local catalog is stuck syncing. Hard reset:
winget source reset --force
winget source update
Wait for the index download to complete (~10 MB), then retry.
If the reset itself hangs, kill winget:
Get-Process winget -ErrorAction SilentlyContinue | Stop-Process -Force
Then re-run the reset.
Fix 2 — Stuck at "Downloading" 0% (Delivery Optimization)
winget's default downloader is Delivery Optimization (DO), which tries peer-to-peer caching across your local network. On many networks DO stalls forever waiting for peers that don't exist.
Switch to the simpler wininet downloader:
winget settings
In the JSON that opens, add:
{
"network": {
"downloader": "wininet"
}
}
Save. Retry winget — downloads should start immediately.
This fix alone resolves ~80% of "stuck at 0%" cases.
Fix 3 — Stuck mid-download
If downloads start but stall mid-way:
Check bandwidth
Test-NetConnection cdn.winget.microsoft.com -Port 443 -InformationLevel Detailed
Look at the RTT. > 500 ms = slow CDN.
Try a different CDN region
If you're on VPN, your traffic may be routing to a slow region:
- Disconnect VPN
- Re-run winget
Clear partial downloads
Remove-Item "$env:LOCALAPPDATA\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalCache\Local\Microsoft\WinGet\*" -Recurse -Force -ErrorAction SilentlyContinue
Then retry.
Use longer timeout
In winget settings:
{
"network": {
"doProgressTimeoutInSeconds": 300
}
}
5-minute timeout instead of default 60 seconds — useful for slow connections.
Fix 4 — Hangs at "Installing..."
The installer is running but waiting for something (UI prompt, network, dependent service).
Check for a hidden GUI prompt
Some installers show a UI dialog even with --silent. Alt+Tab to find it. Click through.
Force silent + non-interactive
winget install --id <ID> --silent --disable-interactivity
--disable-interactivity tells the installer "don't pop dialogs."
Watch what the installer is doing
Open Task Manager → Details. Look for:
msiexec.exe— MSI install in progress (normal, wait)- The publisher's installer EXE — could be waiting on input
- 0% CPU + no disk activity for 5+ minutes — actually stuck
If stuck, kill the installer:
Get-Process | Where-Object { $_.MainWindowTitle -match "<app name>" } | Stop-Process -Force
Or kill all msiexec processes (only if nothing else is installing):
Get-Process msiexec | Stop-Process -Force
Fix 5 — Hangs after "Successfully installed"
winget cleans up TEMP files and re-indexes after install. Usually completes in seconds, sometimes takes longer if you have many files in %TEMP%.
Clean up TEMP first:
Remove-Item "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue
Then re-run winget.
Fix 6 — winget search hangs
The msstore source is unresponsive (it depends on Microsoft Store backend). Remove it:
winget source remove --name msstore
winget search should be snappy now. You can still install Store apps via the GUI Store app.
Fix 7 — Antivirus interference
Real-time AV scans every downloaded byte. For 200 MB installers, this can multiply install time 5×.
Test by disabling briefly
- Windows Security → Virus & threat protection → temporarily disable real-time protection
- Retry winget
- Re-enable after
If winget is fast without AV, add exclusions:
- Path exclusion:
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalCache - Process exclusion:
winget.exe,msiexec.exe
Done via Windows Security → Virus & threat protection → Manage settings → Add or remove exclusions.
Hard reset (nuclear)
If nothing works:
# Stop everything
Get-Process winget -ErrorAction SilentlyContinue | Stop-Process -Force
Get-Process msiexec -ErrorAction SilentlyContinue | Stop-Process -Force
# Reset App Installer
Get-AppxPackage Microsoft.DesktopAppInstaller | Reset-AppxPackage
# Clear caches
Remove-Item "$env:LOCALAPPDATA\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalCache\Local\Microsoft\WinGet\*" -Recurse -Force -ErrorAction SilentlyContinue
# Reset sources
winget source reset --force
winget source update --accept-source-agreements
# Reboot
shutdown /r /t 0
After reboot, winget should be responsive.
Tips for keeping winget snappy
- Use
wininetdownloader (Fix 2) — single biggest performance win - Remove
msstoresource if you don't use Store apps - Whitelist
winget.exein your AV - Don't run winget over slow VPN unless required
- Update
wingetitself —winget upgrade --id Microsoft.AppInstaller - Reboot weekly — clears MSI lock state
When winget is slow but not stuck
If winget completes but takes a long time:
- 5-10 seconds per install: normal
- 30-60 seconds per install: AV scanning, slow disk, or slow CDN
- 2+ minutes per install: something's wrong; run with
--verbose --logand diagnose
A typical machine on a fast SSD with wininet downloader installs apps in 10-20 seconds each (excluding the actual download).
What's next?
- All winget error codes explained → — full reference
- Installer hash does not match → — hash errors
- Access denied 0x80070005 → — permission errors
- MSI exit codes decoded → — installer return codes
