Error HRESULT 0x80073CFA in Windows 10 while Uninstalling Universal Apps

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.HRESULT 0x80073CFA

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 name script.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.

Photo of author

Written by Utkarsh

Utkarsh Bhatt is a certified tech expert and software engineer for a Fortune 500 Company. He was born in 1995, making him one of the oldest members of the team at EFX. Utkarsh loves solving technical issues and is always the first to jump on any problem that needs solving. When he’s not coding or debugging, he enjoys playing video games (especially Super Smash Bros.) and watching cartoons.

Share on:

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.