Fix it now
The deployment engine found something already registered under the same package identity and refused to overwrite it. Microsoft documents two ways out: raise the version and rebuild, or remove the existing registration for every user on the machine first.
Get-AppxPackage -Name <PackageName> -AllUsers | Select-Object Name,Version,PackageFullName
Remove-AppxPackage -Package <PackageFullName> -AllUsers
Get-AppxProvisionedPackage -Online
Remove-AppxProvisionedPackage -Online -PackageName <PackageName_from_that_list>
Add-AppxPackage -Path .\package.msix -ForceApplicationShutdown
- Read the version column before you remove anything. If it already matches what you are deploying, 0x80073CFB is telling you the install is done and there is nothing to fix.
- Close the application first, including any tray or background component. 0x80073D02 is the same refusal reported because resources the package modifies are still in use.
- Remove the provisioned copy as well, or the package returns for the next new profile and the identity stays occupied.
- If you must go back to an older build deliberately, use
Add-AppxPackage -Path .\package.msix -ForceUpdateFromAnyVersioninstead of the plain install.
-AllUsers works off the parent package type and needs administrator permissions. For a bundle, find it with Get-AppxPackage -PackageTypeFilter Bundle first, or the removal will miss it.
If the install now completes you are done. If it comes back with the same code, the next section covers the case Microsoft documents and most people miss.
Why it happens
A packaged application is identified by the name and publisher declared in its manifest plus its architecture, not by the file you double-clicked. Before anything is staged, the engine reads that identity, looks for an existing registration under it, and compares versions. Nothing matching means a normal install. Something matching at a lower version means an update. Something matching at the same or a higher version stops the operation.
The part that catches in-house packagers is narrower than “the same version is installed”. Microsoft’s own wording for 0x80073CFB is that you may get this error if you are installing a package that is not bitwise identical to the one already installed – and it adds that the digital signature is part of the package, so a rebuild or a re-sign is enough to make the two differ. Two builds that both say 1.0.0.0 in the manifest are not the same package, and the engine will not quietly replace one with the other.
The other half of the picture is that staging is machine-wide while registration is per user, and a provisioned package is a third thing again. A package can be absent from your own Start menu, still registered for a colleague who shares the machine, and still provisioned so it installs for every profile created from now on. That is why a removal that looked complete from your session leaves the identity occupied.
The same identity is registered, and the incoming build is not bitwise identical
You have this one if 0x80073CFB on a package you built yourself, where the version number is unchanged since the last deployment.
- Increment the version in the manifest, then rebuild and re-sign. This is the first of Microsoft’s two documented remedies and the one to prefer in a pipeline.
- If the version genuinely must stay, remove the old package for every user on the system before installing the new one.
- Do not assume a re-sign is harmless. Signing changes the package bytes, so a re-signed build of the same version trips this on purpose.
A higher version is already installed
You have this one if 0x80073D06 rather than 0x80073CFB, and the version listed by Get-AppxPackage is above the one in your file.
- Confirm which build you actually want. A downgrade loses fixes and can leave application data the older code cannot read.
- If the downgrade is intended, deploy with
Add-AppxPackage -Path .\package.msix -ForceUpdateFromAnyVersion. - Check for a provisioned copy at the higher version, which will re-apply itself to new profiles and make the downgrade look like it silently reverted.
Something is still running, or its data is still open
You have this one if 0x80073D02 or 0x80073D05, often after the application appeared to close.
- 0x80073D02 is ERROR_PACKAGES_IN_USE: resources the package modifies are in use. Close every process the package owns, then retry.
- Deploy with
-ForceApplicationShutdownto have the engine close the package’s processes and its dependencies for you. - 0x80073D05 is the previously existing application data failing to delete. Microsoft names two triggers: the simulator running, and files open in the app data – a log file open in a text editor is enough.
The package is registered for another user, or provisioned
You have this one if Removal succeeds, Get-AppxPackage -Name <name> returns nothing for you, and the install is still refused.
- Re-run the query with
-AllUsersfrom an elevated session. Without it you only see your own registrations. - List provisioned packages with
Get-AppxProvisionedPackage -Onlineand remove the matching one withRemove-AppxProvisionedPackage -Online -PackageName <name>. - To remove for one specific profile,
Remove-AppxPackage -User <SID>. That parameter accepts SIDs only – read one withwhoami /user.
Full reference
The cmdlets this work is done with
| Command | What it does |
|---|---|
Get-AppxPackage -Name <name> -AllUsers |
Lists every registration of that identity on the machine, not just yours. Needs elevation |
Get-AppxPackage -PackageTypeFilter Bundle |
Finds the bundle parent, which is what -AllUsers removal works off |
Remove-AppxPackage -Package <fullname> -AllUsers |
Removes the registration for all accounts. Administrator permissions required |
Remove-AppxPackage -Package <fullname> -User <SID> |
Removes it for one profile. SIDs only; whoami /user prints the current one |
Get-AppxProvisionedPackage -Online |
Lists packages provisioned into the image for new profiles |
Remove-AppxProvisionedPackage -Online -PackageName <name> |
Removes the provisioned copy so it stops returning |
Add-AppxPackage -Path .\package.msix -ForceApplicationShutdown |
Installs, closing processes associated with the package and its dependencies |
Add-AppxPackage -Path .\package.msix -ForceUpdateFromAnyVersion |
Stages or registers a specific version regardless of a higher one already present |
Get-AppxLog |
Returns the log for the most recent deployment operation. Get-AppxLog -All returns every log on the machine |
-PreserveApplicationData is not a general way to keep user data across a reinstall. Microsoft documents it as applicable only to apps under development that were registered from a loose file layout, so on a normal signed package it is not the parameter you want.
Reading the failure properly
When Add-AppxPackage or Remove-AppxPackage fail they return an ActivityID, and that ID is what Get-AppxLog takes. Run Get-AppxLog immediately after the failure and you get the record for that attempt rather than a guess. The same material is in Event Viewer under Applications and Services Logs, Microsoft, Windows, AppXDeployment-Server, in the Operational channel; the packaging-side channel Microsoft points at separately is AppxPackaging, under Microsoft-Windows-AppxPackaging/Operational.
Read the code from that log rather than from whatever wrapper ran the install. A deployment tool will frequently surface a single generic failure for all five of the codes in this article, and they need four different responses.
Getting a clean slate on a machine that will not let go
- Query with
-AllUsersand note every PackageFullName returned, including resource and framework entries that share the family name. - Remove the registrations, then remove the provisioned entry, in that order.
- Sign out and back in. Registration state is per user and some of it is only released when the profile is unloaded.
- Re-query with
-AllUsersand confirm nothing comes back before installing again. - If a stale entry survives all of that, deploy the new build with
-ForceUpdateFromAnyVersion, which stages regardless of what version is recorded.
In a deployment pipeline
- Increment the version on every build. It is the cheaper of Microsoft’s two remedies and it removes this class of failure entirely.
- Treat a re-sign as a new package. If your signing step runs after versioning, two artefacts with the same version number will still collide.
- Do not rely on uninstalling through Settings. That removes the current user’s registration and leaves both other users’ registrations and the provisioned copy in place.
- If you deploy to shared or multi-session machines, always test the removal path with a second signed-in profile. That is where the identity conflict actually lives.
Every code this article covers
| Code | What it points at | Source |
|---|---|---|
0x80073CFB |
ERROR_PACKAGE_ALREADY_EXISTS: the package is already installed and reinstallation is blocked. Also raised when the incoming package is not bitwise identical to the installed one – and the signature counts, so a rebuild or re-sign at the same version triggers it | Microsoft Learn |
0x80073D06 |
ERROR_INSTALL_PACKAGE_DOWNGRADE: a higher version of this package is already installed | Microsoft Learn |
0x80073D02 |
ERROR_PACKAGES_IN_USE: the package could not be installed because resources it modifies are currently in use | Microsoft Learn |
0x80073D05 |
ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED: the package’s previously existing application data could not be deleted, for example with the simulator running or files open in the app data | Microsoft Learn |
Confirm the fix worked
Get-AppxPackage -Name <name> -AllUsersreturns the version you intended to deploy, and only that version.Get-AppxProvisionedPackage -Onlineno longer lists the old build.- The application launches for a second profile on the same machine, not just for you.
Get-AppxLogfor the install shows the deployment completing rather than a retry.
Questions people ask about this
I have not changed the version, and the package really is different. Why is that an error?
Because Microsoft treats identity plus version as the contract. The published note on 0x80073CFB says the error appears when the incoming package is not bitwise identical to the installed one, and that the digital signature is part of the package. Two different builds claiming the same version are exactly the situation the check exists to catch.
Is -ForceUpdateFromAnyVersion safe to use routinely?
It is documented and it works, but it exists for the deliberate downgrade. Using it as a standing workaround means your deployments no longer respect version ordering, so an older build can quietly replace a newer one on a machine that got ahead of your pipeline.
Why does the app come back after I remove it?
It was provisioned. A provisioned package installs itself for every new user profile, so removing your own registration only clears half of it. Get-AppxProvisionedPackage -Online shows what is provisioned and Remove-AppxProvisionedPackage -Online clears it.
Can I keep user data across the reinstall?
Not with -PreserveApplicationData on a normal package. Microsoft documents that parameter as applying only to apps under development registered from a loose file layout. For a signed production package, back up what you need out of the app data location before removing.
