Fix it now
Microsoft documents 0xC004F015 as SL_E_PRODUCT_SKU_NOT_INSTALLED, meaning the licence is not installed. Two quite different things produce it: a key that belongs to a different edition from the one running, and, on a volume estate, a KMS host whose host key does not cover this client. Establish which before changing anything.
DISM /Online /Get-CurrentEdition
slmgr /dli
slmgr /dlv
- Compare the edition DISM reports with the product the installed key claims to be. If they disagree, that is the whole answer.
- If the machine is a volume client, read the KMS machine name from
slmgr /dlv. A host that cannot serve this product produces this code with nothing wrong locally. - To keep the edition and change the key:
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX, thenslmgr /ato. - To change the edition instead, check first what this installation can move to:
DISM /Online /Get-TargetEditions. - On Windows client, entering a Pro key on a Home installation through Start, Settings, System, Activation performs the edition upgrade rather than failing.
On Windows Server the edition change is a DISM operation and needs /AcceptEula and /ProductKey. It is one-way, and some installed roles block it.
If the edition and the key now agree and the machine activates, you are done. If they already agreed, the next section covers the other half of this code.
Why it happens
Product keys are not generic. Each belongs to a key range tied to a specific edition and channel, and the licence store holds licence files describing what each edition requires. Installing a key records which product you claim to hold; the service then looks for a licence that matches both that claim and the edition actually running. When Home is installed and the key belongs to Enterprise, there is no pairing to make, and the service reports the licence as not installed rather than the key as wrong.
That wording is Microsoft’s own. The Software Licensing API documents 0xC004F015 as SL_E_PRODUCT_SKU_NOT_INSTALLED, “The license is not installed”, and it is returned by the offline activation functions among others. It is a statement about what is in the licence store, not a verdict on your key.
There is a second documented route to the same code and it has nothing to do with the local machine. Microsoft has a troubleshooting article in which Windows 10 Enterprise clients return 0xC004F015 against Windows Server 2012 R2 and 2008 R2 KMS hosts, with details naming 0xC004F042 and Event ID 12290 on the host. The cause there is the host key: the host was carrying a key that did not cover the client, and the fix was to install the correct host key on the host. Nothing on the clients was wrong.
0xC004F017 and 0xC004F00A appear alongside these and Microsoft publishes no meaning for either. 0xC004F004 and 0xC004F005 do appear in Microsoft’s activation help, but not where you would expect: they are grouped with the invalid product key, activation-servers-busy and failed-free-upgrade errors rather than with edition mismatches. If you are seeing one of those two, retry and check the key before you start moving editions around.
The key belongs to a different edition
You have this one if DISM /Online /Get-CurrentEdition and slmgr /dli name two different products outright.
- Decide which one is correct for this machine: the edition running, or the key you were issued.
- To keep the edition, install a matching key:
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX, thenslmgr /ato. - To move the edition up instead, confirm the target is offered by
DISM /Online /Get-TargetEditionsfirst. - Reactivate and confirm with
slmgr /dlv.
Edition upgrades go one way. Moving down, from Pro to Home for instance, needs a clean installation rather than a key change.
The KMS host key does not cover this client
You have this one if A volume client, an unchanged image, and a host that other machines activate against happily. slmgr /dlv names a host, and 0xC004F042 or Event ID 12290 appears in the picture.
- On the host, read the description line in
slmgr /dlvto see which host key is installed. - Check in your licensing portal whether that key covers the client product you are deploying.
- Install the host key that does cover it, on the same host, and activate it.
- Retry from a failing client, then confirm an older client still activates.
This is the case that wastes the most time, because every check on the client comes back clean and the fault is on a machine nobody was looking at.
The key is for a different channel or servicing branch
You have this one if Both sides report the same edition name, and the key is still refused or leaves the machine with no licence.
- Check the exact build and branch with
winver. - Confirm from your licensing portal whether the key was issued for that branch or the other one.
- Install the correct key for what is running, or reinstall from media that matches the key you hold.
- Confirm the description in
slmgr /dlvnames the channel you expect.
The licence files themselves are missing or damaged
You have this one if Edition and key genuinely match, other machines from the same image activate normally, and only this one fails.
- Reinstall the system licence files:
slmgr /rilc. - Restart the licensing service:
net stop sppsvcthennet start sppsvc. - Reinstall the product key and activate again.
- If it still fails, run
sfc /scannowand thenDISM /Online /Cleanup-Image /RestoreHealthbefore retrying.
Full reference
Telling the mismatches apart
| What the checks report | What has to change |
|---|---|
| Edition reads Home, key is Pro or Enterprise | Upgrade the edition, or install a Home key |
| Both say Pro and the key still will not install | Channel or servicing branch mismatch |
| An N or single-language edition is installed | Those variants use their own key ranges |
| Windows Server Standard installed, Datacenter key held | Server editions change by DISM operation, not by key alone |
Volume client, host named in slmgr /dlv, everything local matches |
The host key, not the client. Go and read the host |
| It activated before a feature update and not since | Check the branch first, then rebuild the licence files |
Editions, and how they actually change
| Scenario | How the change is made |
|---|---|
| Windows client, Home to Pro | Enter a valid Pro key. Start, Settings, System, Activation performs the upgrade in place |
| Windows client, Pro to Home | Clean installation. There is no downgrade path by key |
| Windows Server, Standard to Datacenter | DISM /Online /Set-Edition:<edition> /AcceptEula /ProductKey:<key> |
| Offline image | DISM /Image:<path> /Set-Edition:<edition>, then /Set-ProductKey if needed |
| Check what is possible first | DISM /Online /Get-TargetEditions |
Server edition conversion is one-way and some installed roles block it entirely. Take a backup, plan a maintenance window, and treat it as a change rather than as a troubleshooting step. slmgr /upk is worse: it removes the installed key and leaves the machine Unlicensed after restart until a valid key is installed and activated.
Why this clusters around imaging
A setup answer file with no key installs whatever the media defaults to, and the corporate key pushed afterwards belongs to a different edition. That is the single most common origin of this code in a managed estate, and it produces a batch of identical failures rather than one. The same trap catches servicing branches: a long-term servicing key will not activate a general availability build, and the reverse is equally true.
When you see this on more than a couple of machines, check the image before you check the machines. One wrong edition in a reference image reproduces itself perfectly across every deployment, and fixing them individually is a lot of work to arrive back where you started at the next rollout.
When everything matches and it still fails
- Confirm the machine is genuinely on the key you think it is.
slmgr /dlishows the last five characters, which is enough to tell two keys apart and is often not the key anyone expected. - If it is a volume client, go and look at the host. This is the half of the code that no amount of client-side work reaches.
- Rebuild the licence files with
slmgr /rilcand restart the Software Protection service. - Repair the component store with
sfc /scannowandDISM /Online /Cleanup-Image /RestoreHealthif the scan reports repairs. - Check the clock. Activation fails on time skew with codes of its own, but a machine that is hours out will produce a confusing mixture of symptoms.
Before you conclude you need a different key
Compare what you are running against what the key was sold as, and do it from the two commands rather than from memory. A surprising share of these tickets end with the reader already owning the right key and having installed a different one, which costs nothing to correct. Where the two genuinely differ, you need a key for the edition you intend to run, and that is a purchase rather than a repair.
When a licence is the actual fix
If the edition on disk is the one you actually want to run, and the key you hold belongs to a different product, no amount of troubleshooting reconciles them: you need a key issued for the edition that is installed. Arco supplies Windows 11 Pro retail keys alongside the other client editions, and will check the output of DISM /Online /Get-CurrentEdition against what you are about to order first. Do run that check. If you are a volume customer seeing this on clients, look at the KMS host key before buying anything at all – the case Microsoft documents for this code on volume estates is fixed on the host and costs nothing on the clients.
Every code this article covers
| Code | What it points at | Source |
|---|---|---|
0xC004F015 |
SL_E_PRODUCT_SKU_NOT_INSTALLED: the licence is not installed. Microsoft also documents it on volume estates where the KMS host key does not cover the client | Microsoft Learn |
0xC004F017 |
Reported in the same situations as the code above. No published meaning; diagnose from the edition and the installed key | not published by the vendor |
0xC004F00A |
Another licence-store refusal seen alongside these. No published meaning | not published by the vendor |
0xC004F004 |
Microsoft groups this with an invalid product key, busy activation servers, or a failed free upgrade – not with edition mismatches | Microsoft Support |
0xC004F005 |
Grouped by Microsoft with the same invalid-key and servers-busy family as 0xC004F004 | Microsoft Support |
Confirm the fix worked
slmgr /dlvreports Licence Status: Licensed and the description names the edition and channel you expect.DISM /Online /Get-CurrentEditionmatches the key you installed.- Start, Settings, System, Activation offers no remediation link.
- If the fix was on the KMS host, a second client of the same edition activates through discovery alone.
- An older client that already worked still activates, confirming nothing regressed on the host.
Questions people ask about this
Can I turn Home into Pro without reinstalling?
Yes. Entering a valid Pro key on a Home installation triggers an edition upgrade in place, keeping files and applications. It is the downgrade direction that needs a clean install.
Why did this start after a Windows feature update?
Usually because the machine moved between servicing branches, or the licence files were rebuilt during the upgrade. Check the branch with winver first, then rebuild the licence files with slmgr /rilc if the branch is unchanged.
Do I need a new key, or is mine simply installed wrongly?
Check before spending anything. Compare DISM /Online /Get-CurrentEdition with what the key was sold as. If they match and the key still fails, it is a licence-store or host problem and costs nothing. If they genuinely differ, you need a key for the edition you intend to run.
Will slmgr /rilc delete anything?
It reinstalls the licence files that ship with Windows, from the OEM and token folders under the Windows directory, and does not touch user data or applications. The machine may briefly report itself unlicensed until you reactivate.
All my volume clients fail and nothing changed on them. Where do I look?
At the KMS host. Microsoft documents this code being returned to clients whose host was carrying a host key that did not cover them, with 0xC004F042 and Event ID 12290 alongside it. Every client-side check comes back clean because every client is fine.
