How to Fix Error 0x800F0954 (.NET Framework 3.5) on Windows 10/11
What error 0x800F0954 means
Error 0x800F0954 is the failure code Windows reports when it cannot obtain the payload files for an optional feature. The classic case is .NET Framework 3.5, which includes .NET 2.0 and 3.0 and is still required by a surprising number of older applications and games. Language packs fail the same way, for the same reason: neither is baked into the base Windows install, so Windows has to fetch the files on demand at install time.
On a home PC that fetches straight from Windows Update, that download normally just works, which is why this error is far more common on work PCs. Many companies point their PCs at a local WSUS server for updates, and WSUS does not always host the optional-feature payloads. Windows asks WSUS for .NET Framework 3.5, WSUS has nothing to give, and the install fails with 0x800F0954. A damaged component store can produce the same code, which is why the repair steps are included below, but the source problem comes first: fix where Windows looks, and most installs go through immediately.
Common causes
- A WSUS-locked PC: the PC is configured to use a WSUS server that does not host .NET Framework 3.5 or language-pack files, so the on-demand download has nowhere valid to come from.
- A Group Policy that blocks direct downloads: the optional-component policy is either unset or set to require WSUS, preventing Windows from falling back to Windows Update.
- Mismatched installation media: the DISM source points at media for a different Windows version or edition, or at the wrong drive letter, so the feature files are not found.
- A damaged component store: corrupt servicing files mean Windows cannot stage the feature even when the source is correct, and the install fails again with the same code.
- Stale or oversized CBS logs: corrupt servicing logs can confuse DISM validation, which is one reason a clean repair pass sometimes clears an otherwise stubborn 0x800F0954.
How to fix error 0x800F0954 — step by step
Work through these fixes in order. Most people clear this error by step 2 or step 4.
- Confirm what is failing and retry from Windows Features First, pin down exactly what Windows was trying to install when 0x800F0954 appeared: it is almost always .NET Framework 3.5 (which includes .NET 2.0 and 3.0) or a language pack, both of which are optional features that Windows fetches on demand rather than shipping in the base install. Open Control Panel, go to Programs, then Programs and Features, and click Turn Windows features on or off. Tick .NET Framework 3.5 (includes .NET 2.0 and 3.0), click OK, and let it try once more. If the same code comes back, you have confirmed the problem is the download source, not a one-off glitch, and the WSUS fixes below are the right next move. Note which feature failed, because you will need its exact name for the DISM and PowerShell commands later.
- Bypass WSUS with Group Policy On Windows 10 or 11 Pro, Enterprise, or Education, the cleanest fix is to tell Windows to go straight to Windows Update for optional features instead of your WSUS server. Press Windows key + R, type gpedit.msc, and press Enter to open the Local Group Policy Editor. Go to Computer Configuration, then Administrative Templates, then System, and open Specify settings for optional component installation and component repair. Set it to Enabled, tick Download repair content and optional features directly from Windows Update instead of Windows Server Update Services (WSUS), and click OK. Then open Terminal (Admin) and run gpupdate /force, restart the PC, and try the install again. On a work PC managed by your company, check with your IT team first: this setting may be enforced by domain policy and revert on its own.
- Bypass WSUS in the registry on Home editions Windows Home has no Group Policy Editor, so the same bypass is done in the registry instead. Press Windows key + R, type regedit, and press Enter, approving the User Account Control prompt. Before changing anything, back up the key: right-click the WindowsUpdate key and choose Export, saving the file somewhere safe. Then go to HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU and look at the UseWUServer value on the right. If it is set to 1, the PC is locked to WSUS; double-click it and change its value data to 0, then click OK. If the AU key does not exist, the PC is not WSUS-locked and you can skip this step. Restart the Windows Update service or restart the PC, then retry the install. If the value flips back to 1 after a restart, a domain policy is enforcing it, so use the installation-media method in the next step instead.
- Install .NET Framework 3.5 from Windows installation media This is the most reliable fix when WSUS cannot be bypassed, because it skips the network source entirely. Insert your Windows installation USB or mount the Windows ISO by double-clicking it in File Explorer, and note its drive letter, for example D. Right-click Start and open Terminal (Admin) or Command Prompt (Admin). Run this command, replacing D with your actual drive letter: DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /Source:D:\sources\sxs /LimitAccess. The /LimitAccess switch stops DISM from falling back to Windows Update, so a success here proves the media files are good. Wait for the command to report the feature as enabled, which usually takes a few minutes, then restart the PC. If DISM reports that the source files could not be found, your media is for a different Windows version or edition than the installed system, so recreate it with the Media Creation Tool for your exact version.
- Repair the component store with SFC and DISM If the media install also fails, the local component store itself may be damaged. In an administrator terminal, run sfc /scannow and wait for it to finish, which takes 10 to 20 minutes. Then run DISM /Online /Cleanup-Image /RestoreHealth, which repairs the component store that the feature installer draws from and takes 15 to 30 minutes. Restart the PC after each tool finishes, then retry the .NET Framework 3.5 install from Windows Features. Damaged servicing files can make an otherwise straightforward feature install fail with 0x800F0954 even when the download source is fine, and this pair of repairs is the standard way to rule that out.
- Install with PowerShell and check the CBS log As a final approach, try the PowerShell route, which sometimes succeeds where the graphical installer fails. Open Windows PowerShell as an administrator and run Add-WindowsCapability -Online -Name NetFx3~~~~ -Source D:\sources\sxs, again replacing D with your media drive letter, or omit the -Source part if you have already bypassed WSUS so it can pull from Windows Update. Restart the PC when it finishes and confirm in Turn Windows features on or off that .NET Framework 3.5 is now ticked. If it still fails, open C:\Windows\Logs\CBS\CBS.log and search for 0x800F0954 to see which source Windows tried and why it was rejected; that line tells you whether the blocker is still WSUS, a mismatched media version, or a corrupt store, and which earlier step to revisit.
Did this fix it? Quick checklist
- Failing feature identified (.NET Framework 3.5 or a language pack) and retried from Windows Features
- WSUS bypassed via Group Policy, or UseWUServer set to 0 in the registry on Home editions
- .NET Framework 3.5 installed from matching Windows installation media with DISM, if WSUS could not be bypassed
- SFC and DISM repair passes run clean, PowerShell install tried, CBS log checked for the failing source
If the error still appears after all six steps, double-check that your media matches your installed Windows version and edition exactly — a Windows 11 ISO will not serve a Windows 10 install, and vice versa — and that no third-party security software is blocking the feature installer. On a domain-joined work PC, ask your IT team whether WSUS is intentionally enforced; they may need to approve the feature payload on the server side. As a last resort, an in-place upgrade repair with the Media Creation Tool, keeping your files and apps, rebuilds the servicing stack and clears failures that survive every targeted fix.
Frequently asked questions
What does error 0x800F0954 mean?
Error 0x800F0954 means Windows could not download the files for an optional feature, usually .NET Framework 3.5 or a language pack. The usual cause is a PC pointed at a WSUS server that does not host those feature files, so Windows asks WSUS, gets nothing usable, and gives up. A damaged component store can cause the same code.
Why does 0x800F0954 mostly hit work PCs?
Work PCs are commonly configured to get updates from a company WSUS server instead of directly from Windows Update, and WSUS does not always carry optional-feature payloads like .NET Framework 3.5. Home PCs pull straight from Windows Update, so they rarely see this code. That is why the bypass fixes in this guide — Group Policy or the UseWUServer registry value — are the first thing to try on a managed PC.
Is it safe to change UseWUServer to 0?
Yes, with one caution: setting UseWUServer to 0 only tells this PC to fetch optional features from Windows Update instead of WSUS, and it does not remove updates or change your files. Back up the registry key first by exporting it, and on a company PC check with IT, because domain policy may restore the value and your IT team may prefer you to install from approved media instead.
The media install says source files could not be found. What now?
That means the installation media does not match your installed Windows version or edition, or the drive letter in the command is wrong. Recreate the media with the Media Creation Tool for your exact version and edition, mount it, confirm the drive letter in File Explorer, and check that the sources\sxs folder exists on it before rerunning the DISM command.