Universal Apps können nicht über PowerShell deinstalliert werden

11

Ich war gerade dabei, alle Universal Apps von einer neuen Windows 10-Installation zu deinstallieren, als ich auf eine Straßensperre stieß.

Es ist nicht das erste Mal, dass ich das mache und es geht immer gut. Dieses Mal erhalte ich jedoch die folgende Meldung , wenn ich in PowerShell

Get-AppxPackage -allusers | Remove-AppxPackage

oder etwas Spezifischerem schreibe

Get-AppxPackage -allusers *windowscalculator* | Remove-AppxPackage

:

Remove-AppxPackage: Bereitstellung mit HRESULT fehlgeschlagen: 0x80073CFA, Entfernung fehlgeschlagen. Bitte wenden Sie sich an Ihren Softwareanbieter. (Ausnahme von HRESULT: 0x80073CFA) Fehler 0x80070032: AppX-Bereitstellung Entfernen Sie den Vorgang für das Paket Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe von: C: \ Programme \ WindowsApps \ Microsoft.WindowsCalculator_10.1603.8.

Diese App ist Teil von Windows und kann nicht pro Benutzer deinstalliert werden. Ein Administrator kann versuchen, die App vom Computer zu entfernen, indem er Windows-Funktionen ein- oder ausschaltet. Es ist jedoch möglicherweise nicht möglich, die App zu deinstallieren.

HINWEIS: Weitere Informationen finden Sie im Ereignisprotokoll nach [ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101 oder verwenden Sie die Befehlszeile Get-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd-c57520fbd101

In Zeile: 1 Zeichen: 49

+ Get-appxpackage -allusers *windowscalculator* | Remove-AppxPackage + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (Microsoft.Windo...__8wekyb3d8bbwe:String) [Remove-AppxPackage], IOException + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.RemoveAppxPackageCommand


Ich erhalte diese Meldung für jede einzelne App, die ich zu deinstallieren versuche, einschließlich derjenigen, von denen ich weiß, dass sie perfekt deinstallierbar sind, wie der Taschenrechner oder der Bildbetrachter, was noch nie zuvor passiert ist.
Powershell läuft erhöht und alles andere funktioniert und scheint normal zu sein.

Kann ich neben der Neuinstallation von Windows noch etwas tun?

Ryakna
quelle
1
Probieren Sie das PowerShell-Skript im letzten Eintrag dieses Beitrags aus: Entfernen von System-Apps bereinigen (Bypass-Fehler 0x80073CFA) .
Harrymc
Bitte antworte .
Harrymc
@PIMP_JUICE_IT Dies bedeutet jedoch, dass alle Apps aus den bereitgestellten Paketen neu installiert werden, nachdem sie vom Benutzerkonto deinstalliert wurden. Ich konnte keines von ihnen überhaupt deinstallieren, das ist das Problem.
Ryakna
@ Ryakna hast du den Hack überprüft, den ich im Netz gefunden habe?
magicandre1981

Antworten:

5

Ab dem Windows 10 Anniversary-Update hat Microsoft einen neuen Eintrag IsInboxin der SQLite-Datenbank C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srdfür die Posteingangs-Apps hinzugefügt . Der Versuch, eine als entfernt gekennzeichnete App zu entfernen, IsInboxschlägt fehl 0x80073CFA.

Es gibt jedoch eine hässliche Problemumgehung, die im April 2017 entdeckt wurde .

Sie müssen die Tools ProcessHacker und DB Browser für SQLite herunterladen und installieren .

  • Führen Sie ProcessHacker 2 als Administrator aus, wählen Sie a aus C:\Windows\System32\svchost.exe, klicken Sie mit der rechten Maustaste und wählen Sie Misc->Run as this user

Geben Sie hier die Bildbeschreibung ein

Wählen Sie nun hier C:\Program Files\DB Browser for SQLite\DB Browser for SQLite.exeund starten Sie es. Klicken Sie im SQLite-Browser aufOpen database

Geben Sie hier die Bildbeschreibung ein

und öffnen Sie die Datei C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd(ändern Sie den Dateityp im geöffneten Dialogfeld in alle Dateien, um sie anzuzeigen).

Klicken Sie nun auf die Browse DataRegisterkarte und ändern Sie die Tabelle inPackage

Geben Sie hier die Bildbeschreibung ein

Wählen Sie nun die Apps aus, die Sie entfernen möchten, und ändern Sie die 1 für die Spalte IsInboxin 0und speichern Sie die Änderungen.

Geben Sie hier die Bildbeschreibung ein

Wiederholen Sie diesen Vorgang für alle Apps, die Sie entfernen möchten. Jetzt sollten die Powersehll-Befehle funktionieren.

Der Autor schreibt jedoch, dass Microsoft das Upgrade auf neuere Windows-Builds blockiert, wenn Posteingangs-Apps entfernt werden. Denken Sie also daran.

magicandre1981
quelle
Vielen Dank für diese Info. Hat mir geholfen, die defekte Speicheranwendung manuell zu löschen, die auf keine andere Weise gelöscht werden konnte (einschließlich Power Shell).
ElDog
Es scheint, dass dies in späteren Windows 10-Builds nicht mehr funktioniert. Die Datenbank enthält jetzt Trigger, die benutzerdefinierte Funktionen ausführen. Daher schlägt jedes Update fehl ("Fehler: Keine solche Funktion: WorkID"), wenn die Ladeanwendung die erforderlichen Funktionen nicht installiert.
Tim Sylvester
@ TimSylvester Welche App möchten Sie deinstallieren? 1903 können Sie weitere Posteingangs-Apps deinstallieren.
magicandre1981
Hallo, ich weiß, dass dies jetzt ziemlich alt ist, aber ich habe gerade einen Laptop kaputt gemacht, weil er nicht aktualisiert werden würde und dieser Vorgang vage vertraut erscheint. Ich kann mich nicht erinnern, ob ich dies tatsächlich getan habe, aber gibt es eine Möglichkeit festzustellen, ob ich das Update entfernt habe, das Apps einschränkt (offensichtlich auf anderen Systemen)? Wie kann ich mithilfe von PDQ Inventory überprüfen, ob ich eine Liste der betroffenen Systeme abrufen kann, und wenn ich die Apps neu installiere, werden zukünftige Upgrades fortgesetzt? Oder ist dies jetzt mit der neuesten Version von Windows umstritten, weil ich es für ziemlich dumm von MS halte, Updates über etwas so Dummes zu verhindern.
Jon Weinraub
@ JonWeinraub In der aktuellen Windows 10-Version können Sie weitere Posteingangs-Apps offiziell deinstallieren. Sie benötigen sie möglicherweise nicht
magicandre1981
4

Das Entfernen von System-Apps nach dem Bereinigen (Bypass-Fehler 0x80073CFA) enthält das folgende PowerShell-Skript:

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))
}

Zur Verwendung dieses Skripts bemerkt der Autor:

Sie können $ packageBase in verschiedene Paketnamen ändern.

Ich habe dieses Skript nicht selbst ausprobiert.

harrymc
quelle
Danke für deine Antwort. Ich habe das Skript in einigen anderen Systemen ausprobiert und es funktioniert in der Tat für fast alle universellen Apps, auch für einige normalerweise nicht entfernbare. Auf dem problematischen System bleibt das Problem jedoch leider bestehen und das Skript funktioniert nicht. Es zeigt genau die gleichen Fehlermeldungen in der Powershell mit allen Apps, die ich zu entfernen versuche.
Ryakna
Wenn dies immer noch passiert, wenn PowerShell mit "Als Administrator ausführen" aufgerufen wird, stimmt auf diesem Computer etwas nicht. Wenn dies ein Problem mit dem Store ist, versuchen Sie diese 5 Tipps, um Windows Store- und App-Probleme in Windows 10 zu beheben .
Harrymc
@harrymc Es hat nicht funktioniert mit$packageBase = "xboxapp", "officehub", "skypeapp"
JinSnow
2

Das Windows-Jubiläumsupdate hat einige Änderungen vorgenommen, die verhindern, dass Sie bestimmte Funktionen wie Cortana deaktivieren oder Apps auf offizielle Weise entfernen. Einige Apps wie die Xbox App Microsoft betrachteten sie als wichtige App für das System und verhinderten so offizielle Mittel, um sie zu entfernen.

Wenn Sie in das Startmenü gehen, können Sie mit der rechten Maustaste darauf klicken und auf Deinstallieren klicken. Umgekehrt können Sie die Startschaltfläche nach rechts klicken, zu Einstellungen, dann zu Apps und Funktionen gehen und von dort aus deinstallieren.

Nun, wenn Sie darauf bestehen, diese Apps zu entfernen. Sie werden gespeichert. C:\windows\SystemAppsSie können also den Ordner finden, in dem er gespeichert ist, und den Ordner einfach entfernen. Die sicherere Option besteht darin, ihn umzubenennen und _am Ende des Namens ein Zeichen wie den Unterstrich hinzuzufügen .

Nur um hinzuzufügen, wenn Sie einen Ordner entfernen oder innerhalb des Systemapps-Ordners umbenennen, wird dies technisch nicht deinstalliert, sondern nur zwangsweise entfernt, wenn Sie den Ordner gelöscht haben, wodurch andere Dinge wie Registrierungsschlüssel und andere Dateien an anderer Stelle installiert bleiben könnten Es wird verwendet, befindet sich jedoch nicht im Ordner systemapps oder erzwingt, dass es nicht ausgeführt wird, wenn Sie den Ordner umbenannt haben.

Wie Ryakna in den Kommentaren unten sagte, kann die Verwendung einer dieser beiden Optionen später zu Problemen führen. Aus meiner Erfahrung habe ich jedoch noch keine Probleme, einschließlich der Aktualisierung. Es wird jedoch weiterhin empfohlen, das Programm auf offizielle Weise zu deinstallieren, entweder mithilfe von Powershell, wenn Sie damit vertraut sind, oder über die Programm- und Funktionsoption oder die Menüoption. Der SystemAppsOrdner sollte nicht umbenannt oder gelöscht werden. Wenn Sie dies tun, treten höchstwahrscheinlich Probleme auf, als wenn Sie einen Ordner im Ordner systemapps umbenennen oder entfernen würden.

Frostalf
quelle
Vielen Dank für Ihre Zeit. Das Problem ist, dass dieses Windows-Image aus dem November stammt und noch nicht mit dem Internet verbunden ist und daher nicht aktualisiert wurde. Außerdem habe ich nur versucht, den Store und den Taschenrechner unter Verwendung der gleichen Methode von einem aktuellen Windows 10 zu deinstallieren, und konnte dies problemlos tun.
Ryakna
@ Ryakna Ah ok, nun, ich werde meine Antwort dort lassen, falls jemand alternative Möglichkeiten kennen möchte, um sie zu entfernen lol
Frostalf
Ich kann den SystemAppsOrdner nicht umbenennen . Ich musste den Xbox App-Ordner mit BleachBit entfernen, was mit offiziellen Mitteln nicht möglich war. Die Xbox-App ist noch installiert, der Prozessspeicherort der Game Bar ist ~\Windows\System32. Ist es sicher zu entfernen GameBar*und GamePanel*Dateien dort?
user598527
@ user598527 Wenn Sie die App nicht auf offiziellem Wege (dh über PowerShell) deinstallieren und den Ordner einfach entfernen oder umbenennen, wird die App nicht wirklich deinstalliert und kann später zu Problemen führen. Und Sie sollten den SystemAppsOrdner nicht umbenennen, da dies in Windows 10 unbedingt C:\Windows\SystemAppserforderlich ist. Zu Ihrer Information: Die Windows Universal Apps-Ordner gelten für System-App-Dateien, C:\Program Files\WindowsAppsfür andere App-Dateien und C:\Users\Ryakna\AppData\Local\Packagesfür App-Daten.
Ryakna
1
@ user598527 Sie haben wahrscheinlich einige davon entfernt (es gibt viele Xbox AppX), aber ich denke, das Haupt-Xbox-Backbone ist nicht deinstallierbar. Wenn Sie Get-AppxPackage | Select Name, PackageFullNameauf PowerShell ausgeführt werden, können Sie feststellen, dass Xbox AppX noch in Ihrem System vorhanden ist. Ich denke, Sie können die Spielleiste entfernen, wenn Sie die Xbox-Dienste stoppen und deaktivieren (wahrscheinlich Xbox Live Networking Service)
Ryakna