Fix it now
Microsoft publishes 0x80073CF9 as ERROR_INSTALL_FAILED, “Package install failed”, and that is the whole of it. It is a wrapper, not a diagnosis. The useful information is the inner error recorded in the deployment log, which names the package, file or state that actually stopped the install.
Add-AppxPackage -Path .\package.msix
Get-AppxLog
Get-AppxLog | Out-GridView
Get-Service AppXSvc,ClipSVC,StateRepository
- Retry the install, then read the log for that attempt straight away.
Get-AppxLogprints the entries for the most recent deployment operation; piping it to Out-GridView makes a long one readable. - The same entries are in Event Viewer under Applications and Services Logs, Microsoft, Windows, AppXDeploymentServer, Operational, if you would rather read them there.
- Find the inner error and the package name in the result entry. Work from that code, not from 0x80073CF9.
- If the inner error names a framework package, supply the dependencies in the same operation:
Add-AppxPackage -Path .\package.msix -DependencyPath .\dep1.appx,.\dep2.appx.
Searching for 0x80073CF9 on its own produces a mass of unrelated advice, because every person writing it up had a different inner error. Get the inner one first.
If the package installs you are done. If the inner error points somewhere you do not recognise, the next section maps the documented ones onto what to do.
Why it happens
Deploying a packaged application is a multi-stage operation. The package is opened and validated, its signature is checked, its dependencies are resolved, the payload is staged into the package repository, and a registration is written for the user. Each stage fails for its own reasons and raises its own error internally.
What surfaces at the top is usually the generic install failure. Installers, the App Installer application, management tools and deployment scripts all tend to show 0x80073CF9 rather than the inner code, because the inner code was produced several layers down. That is why advice for this code is so scattered: every writer was actually fixing something else.
Microsoft documents the inner codes, and they are specific. 0x80073CF0 is ERROR_INSTALL_OPEN_PACKAGE_FAILED, and its documented causes are worth reading carefully: the package is not signed, the publisher name in the manifest does not match the signing certificate’s subject, or the path was given without the file:// prefix. That is a very different investigation from a damaged download. 0x80073CF1 is the package not being found, 0x80073CF2 is package data that is invalid, 0x80073CF3 is a dependency or conflict validation failure, and 0x80073CF6 is a package that cannot be registered.
0x87AF0813 turns up in the same conversations and has no published meaning at all – no Microsoft documentation page defines it. Treat it exactly as you treat 0x80073CF9: read the deployment log entry that carries it and work from what the operation was doing.
The inner error is a dependency failure
You have this one if The log names a framework package – a C++ runtime framework or a UI framework – rather than your application, or the inner code is 0x80073CF3.
- Obtain the framework packages the vendor lists as prerequisites, in the architecture of the target device.
- Install them first, or pass them in the same operation with
-DependencyPath. - Confirm they registered:
Get-AppxPackage -Name <FrameworkName> -AllUsers. - Retry the main package.
Framework packages are architecture-specific. On a 64-bit device an x86 application still needs the x86 framework, which the x64 framework does not supply.
The package cannot be opened
You have this one if The inner code is 0x80073CF0.
- Confirm the package is signed, and that the certificate is trusted on this device.
- Compare the Publisher in the package manifest with the Subject of the signing certificate. They have to match exactly, character for character.
- If you are installing from a path, use a file:// URI or a plain local path rather than a bare UNC string.
- Check the signature with
Get-AuthenticodeSignature .\package.msix | Format-List.
A previous attempt left the package half staged
You have this one if The log mentions existing state or a package already present, and reinstalling repeats the failure identically.
- List every registration:
Get-AppxPackage -Name <PackageName> -AllUsers. - Remove each one from an elevated session:
Remove-AppxPackage -Package <PackageFullName> -AllUsers. - If the package was provisioned for new users, remove that too with
Get-AppxProvisionedPackage -OnlineandRemove-AppxProvisionedPackage -Online -PackageName <name>. - Reboot, then install again.
Removing a package normally deletes its per-user data. Add -PreserveApplicationData to Remove-AppxPackage if the settings inside the package matter.
A deployment service is stopped, or the session is not elevated
You have this one if Deployment fails immediately for every package, including known-good ones from the Store.
- Check the supporting services:
Get-Service AppXSvc,ClipSVC,StateRepository. - Start any that are stopped and set them back to their default startup type if someone has disabled them.
- Run the installation from an elevated PowerShell session. Anything touching every user, including
-AllUsersand provisioning, requires elevation.
The component store underneath is damaged
You have this one if Several unrelated packages fail, Store installs also fail, and the log entries vary from attempt to attempt.
- Run
DISM /Online /Cleanup-Image /RestoreHealthfrom an elevated Command Prompt and let it finish. - Follow with
sfc /scannow, then reboot. - Retry the deployment and read the log again. If the inner error has changed, work the new one.
Full reference
The documented deployment errors
| Code | Name | Documented meaning |
|---|---|---|
| 0x80073CF0 | ERROR_INSTALL_OPEN_PACKAGE_FAILED | The package could not be opened: unsigned, a publisher name mismatch, or a missing file:// prefix |
| 0x80073CF1 | ERROR_INSTALL_PACKAGE_NOT_FOUND | The package could not be found |
| 0x80073CF2 | ERROR_INSTALL_INVALID_PACKAGE | The package data is invalid |
| 0x80073CF3 | ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED | The package failed dependency or conflict validation |
| 0x80073CF6 | ERROR_INSTALL_REGISTRATION_FAILURE | The package cannot be registered |
| 0x80073CF9 | ERROR_INSTALL_FAILED | Package install failed – the generic wrapper |
| 0x80073CFB | ERROR_PACKAGE_ALREADY_EXISTS | The package is already installed and reinstallation is blocked |
| 0x8007000B | ERROR_BAD_FORMAT | The package is incorrectly formatted, or the signing certificate subject name does not match |
0x80073CF0 and 0x8007000B both point at the signing relationship, and between them they account for a large share of sideloading failures on packages that were built in-house. The rule to remember is that the Publisher string in the manifest and the Subject of the signing certificate must be identical, not merely similar.
Where the log lives
| Command or location | What it gives you |
|---|---|
Get-AppxLog |
The entries for the most recent deployment operation, in the console |
Get-AppxLog | Out-GridView |
The same, in a sortable window – much easier on a long operation |
| Event Viewer, Applications and Services Logs, Microsoft, Windows, AppXDeploymentServer, Operational | The inner error and package name for every deployment attempt |
| Microsoft-Windows-AppxPackaging/Operational | Additional detail from the packaging layer |
Deployment commands
| Command | What it does |
|---|---|
Add-AppxPackage -Path .\package.msix |
Installs a package for the current user |
Add-AppxPackage -Path .\p.msix -DependencyPath .\a.appx,.\b.appx |
Installs it with its framework dependencies in one operation |
Get-AppxPackage -Name <name> -AllUsers |
Shows every registration of a package across profiles |
Remove-AppxPackage -Package <fullname> -AllUsers |
Removes a package for every user, clearing leftover state |
Get-AppxProvisionedPackage -Online |
Lists packages provisioned to install for new profiles |
Why a package installs on one machine and not another
- Which framework packages are already present, and in which architectures.
- What is already registered for that user, and whether an older version is blocking the new one.
- Whether the signing certificate is trusted on the device.
- Whether deployment policy on the device permits what you are doing.
- Whether the package repository and the component store underneath are healthy.
- Compare those five things between the working machine and the failing one before anything else.
Codes without a published meaning
0x87AF0813 has no Microsoft documentation behind it. It appears in reports of Store and App Installer failures and nowhere in the vendor’s own error tables. When you meet a code like that, the productive move is to stop treating it as a lookup problem: find the log entry that carries it, read what operation was in flight, and diagnose that. The same discipline applies to 0x80073CF9 itself, which does have a published meaning and still tells you nothing useful on its own.
Every code this article covers
| Code | What it points at | Source |
|---|---|---|
0x80073CF9 |
ERROR_INSTALL_FAILED: package install failed. A generic wrapper – the real cause is the inner error in the deployment log | Microsoft Learn |
0x80073CF0 |
ERROR_INSTALL_OPEN_PACKAGE_FAILED: the package could not be opened. Documented causes are an unsigned package, a publisher name that does not match the signing certificate, or a path given without the file:// prefix | Microsoft Learn |
0x80073CF2 |
ERROR_INSTALL_INVALID_PACKAGE: the package data is invalid | Microsoft Learn |
0x80073CF1 |
ERROR_INSTALL_PACKAGE_NOT_FOUND: the package could not be found | Microsoft Learn |
0x87AF0813 |
No Microsoft page publishes a meaning for this code. Read the deployment log entry that carries it and work from the operation it was performing | not published by the vendor |
Confirm the fix worked
- Run
Get-AppxPackage -Name <PackageName>and confirm the package is listed with the version you intended. - Launch the application from Start and confirm it opens.
- Re-read the AppXDeploymentServer Operational log and confirm the latest entry records success rather than a new inner error.
- Sign in as a second user, if the package was provisioned, and confirm it appears for them too.
- Run
Get-Service AppXSvc,ClipSVC,StateRepositoryonce more and confirm all three are running.
Questions people ask about this
Do I need to buy anything to fix this?
No. This is a diagnosis exercise using tools already on the machine. Event Viewer, PowerShell, DISM and sfc are all built in, and no licence changes anything about a generic deployment failure.
What does 0x80073CF9 actually mean?
Microsoft publishes it as ERROR_INSTALL_FAILED, package install failed. That is the whole published meaning. It is a wrapper around an inner error produced several layers down, and the inner error is the one worth having.
The log gives 0x80073CF0. Should I re-download the package?
Probably not. Microsoft documents that code as the package failing to open because it is not signed, because the publisher name does not match the signing certificate’s subject, or because the path was supplied without the file:// prefix. Check those three before assuming the file is damaged.
Is it safe to remove a package for all users to clear the state?
Yes for an application you are about to reinstall, but it deletes per-user data held inside the package unless you preserve it. Warn the users first, and use -PreserveApplicationData if their in-app settings matter.
Can I see the inner error without Event Viewer?
Yes. Run the install from PowerShell and follow it immediately with Get-AppxLog, which reads the same log and prints the entries for the operation you just performed. Pipe it to Out-GridView if the operation was a long one.
