Last Updated on December 16, 2018
If you have ever wanted to uninstall bloatware from Windows 10, which of course, you should, chances are that you may not have fully succeeded in that task.
Some apps can be uninstalled. But, for some (and that list is increasing), you will get the error:
HRESULT: 0x80073CFA, Removal failed. Please contact your software vendor
Case in point: HolographicFirstRun, which comes preinstalled in Windows 10 with no option of removal. And, there are many apps like this.
If you are wondering why; well, this app is a part of Windows 10’s basic functionality, so they are deliberately made as such by Microsoft.
This was not always the case though. Starting from the Anniversary Update, Microsoft has added the IsInbox label in their app repository database.
Here is a list of apps that you should not try removing:
- WindowsFeedback
- MicrosoftEdge
- ContactSupport
- CloudExperienceHost
- ParentalControls
- Xbox[GameCallableUI/IdentityProvider]
- Cortana
Any app labeled with the IsInbox
, failed to uninstall with the code 0x80073CFA
.
There is a way to remove these apps, but I would actually ask you to not proceed with removing them. The workaround for uninstalling them is a little ugly and terse for my liking.
Regardless, if you understand what you are doing, here are the instructions to fix the error 0x80073CFA, Removal failed. Please contact your software vendor.
A used named Fifteen15Studios has found a PowerShell script which can remove all the unwanted apps from your PC.
function Enable-Privilege {
param($Privilege)
$Definition = @'
using System;
using System.Runtime.InteropServices;
public class AdjPriv {
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr rele);
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
[DllImport("advapi32.dll", SetLastError = true)]
internal static extern bool LookupPrivilegeValue(string host, string name,
ref long pluid);
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct TokPriv1Luid {
public int Count;
public long Luid;
public int Attr;
}
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
internal const int TOKEN_QUERY = 0x00000008;
internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
public static bool EnablePrivilege(long processHandle, string privilege) {
bool retVal;
TokPriv1Luid tp;
IntPtr hproc = new IntPtr(processHandle);
IntPtr htok = IntPtr.Zero;
retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
ref htok);
tp.Count = 1;
tp.Luid = 0;
tp.Attr = SE_PRIVILEGE_ENABLED;
retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);
retVal = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero,
IntPtr.Zero);
return retVal;
}
}
'@
$ProcessHandle = (Get-Process -id $pid).Handle
$type = Add-Type $definition -PassThru
$type[0]::EnablePrivilege($processHandle, $Privilege)
}
function Take-Over($path) {
$owner = [Security.Principal.NTAccount]'Administrators'
$key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey($path, 'ReadWriteSubTree', 'TakeOwnership')
$acl = $key.GetAccessControl()
$acl.SetOwner($owner)
$key.SetAccessControl($acl)
$acl = $key.getaccesscontrol()
$rule = New-Object System.Security.AccessControl.RegistryAccessRule "Administrators", "FullControl", "ContainerInherit", "None", "Allow"
$acl.SetAccessRule($rule)
$key.SetAccessControl($acl)
}
do {} until (Enable-Privilege SeTakeOwnershipPrivilege)
function Remove-Package($name) {
$key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\$name"
Take-Over $key
Remove-Item -Path HKLM:"$key\Owners" -Force -Recurse
& C:\Windows\System32\PkgMgr.exe /up:$name /norestart /quiet
}
#Remove Feedback
$packageBase = "Microsoft-WindowsFeedback"
$packageNames = (dir ("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\" + $packageBase + "*")).name
forEach ($package in $packageNames)
{
Remove-Package $package.substring($package.indexOf($packageBase))
}
- Copy the whole text above and paste it in
notepad
. - Press Ctrl< + S and save the file on the path:
%userprofile%/Desktop
with the namescript.ps
. - Press Windows key and search for Powershell. Right click on the result, and click on Run as Administrator.
- In the PowerShell window, type the following command and press Enter.
%userprofile%/Desktop/script.ps
After the script has completed its work, restart your PC. That’s it. All the bloatware apps on your PC will be gone.