Nie można odinstalować Universal Apps za pomocą PowerShell

11

Byłem w trakcie odinstalowywania wszystkich aplikacji Universal z nowej instalacji systemu Windows 10, gdy trafiłem na przeszkodę.

Nie robię tego po raz pierwszy i zawsze idzie dobrze. Jednak tym razem za każdym razem, gdy piszę w programie PowerShell

Get-AppxPackage -allusers | Remove-AppxPackage

lub w bardziej szczegółowym języku, pojawia

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

się następujący komunikat:

Remove-AppxPackage: Wdrożenie nie powiodło się z HRESULT: 0x80073CFA, Usunięcie nie powiodło się. Skontaktuj się ze sprzedawcą oprogramowania. (Wyjątek od HRESULT: 0x80073CFA) błąd 0x80070032: Wdrożenie AppX Usuń operację na pakiecie Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe z: C: \ Program Files \ WindowsApps \ Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wbb.

Ta aplikacja jest częścią systemu Windows i nie można jej odinstalować dla poszczególnych użytkowników. Administrator może spróbować usunąć aplikację z komputera, włączając lub wyłączając funkcje systemu Windows. Jednak odinstalowanie aplikacji może nie być możliwe.

UWAGA: Aby uzyskać dodatkowe informacje, poszukaj [ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101 w dzienniku zdarzeń lub użyj wiersza polecenia Get-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd-c57520fbd101

W linii: 1 znak: 49

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


Otrzymuję ten komunikat dla każdej aplikacji, którą próbuję odinstalować, w tym dla tych, które wiem, że są całkowicie odinstalowalne, jak kalkulator lub przeglądarka obrazów, co nigdy wcześniej nie miało miejsca.
Powershell działa na podwyższonym poziomie, a wszystko inne działa i wydaje się normalne.

Czy jest coś, co mogę zrobić oprócz ponownej instalacji systemu Windows?

Ryakna
źródło
Wypróbuj skrypt PowerShell w ostatnim wpisie tego postu: Czyste usuwanie aplikacji systemowych (błąd pomijania 0x80073CFA) .
harrymc
Proszę odpowiedz .
harrymc
@PIMP_JUICE_IT Ale ma to na celu ponowną instalację wszystkich aplikacji z udostępnionych pakietów PO odinstalowaniu ich z konta użytkownika. Nie mogłem odinstalować żadnego z nich, na tym polega problem.
Ryakna
@Ryakna sprawdziłeś włamanie, które znalazłem w sieci?
magicandre1981

Odpowiedzi:

4

Począwszy od aktualizacji Windows 10 Anniversary, Microsoft dodał nowy wpis IsInboxdo bazy danych SQLite C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srddla aplikacji skrzynki odbiorczej. I próba usunięcia aplikacji oznaczonej jako IsInboxnie powiedzie się 0x80073CFA.

Ale istnieje brzydkie obejście, które zostało odkryte w kwietniu 2017 r .

Musisz pobrać i zainstalować narzędzia ProcessHacker i DB Browser dla SQLite .

  • uruchom ProcessHacker 2 jako administrator, wybierz a C:\Windows\System32\svchost.exe, kliknij prawym przyciskiem myszy i wybierz Misc->Run as this user

wprowadź opis zdjęcia tutaj

Teraz wybierz tutaj C:\Program Files\DB Browser for SQLite\DB Browser for SQLite.exei uruchom. W przeglądarce SQLite kliknijOpen database

wprowadź opis zdjęcia tutaj

i otwórz plik C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd(zmień typ pliku w otwartym oknie dialogowym na wszystkie pliki, aby go zobaczyć).

Teraz kliknij Browse Datakartę i zmień tabelę naPackage

wprowadź opis zdjęcia tutaj

Teraz wybierz aplikacje, które chcesz usunąć i zmienić 1 na kolumnie IsInboxdo 0i zapisać zmiany.

wprowadź opis zdjęcia tutaj

powtórz to dla wszystkich aplikacji, które chcesz usunąć, a teraz polecenia Powersehll powinny działać.

Ale autor pisze, że Microsoft blokuje aktualizację do nowszych wersji systemu Windows, jeśli aplikacje skrzynki odbiorczej zostaną usunięte. Miej to na uwadze.

magicandre1981
źródło
Wielkie dzięki za te informacje. Pomógł mi ręcznie usunąć uszkodzoną aplikację sklepu, której nie można było usunąć w żaden inny sposób (w tym power shell).
ElDog
2

Usuwanie aplikacji systemowych po czyszczeniu (błąd obejścia 0x80073CFA) zawiera ten skrypt programu PowerShell:

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

Podczas korzystania z tego skryptu autor zauważa:

Możesz zmienić $ packageBase na różne nazwy pakietów.

Sam nie próbowałem tego skryptu.

harrymc
źródło
Dziękuję za odpowiedź. Próbowałem skryptu w niektórych innych systemach i rzeczywiście działa on dla prawie wszystkich uniwersalnych aplikacji, nawet tych zwykle nieusuwalnych, jednak w problematycznym systemie problem niestety utrzymuje się i skrypt nie działa. Pokazuje dokładnie te same komunikaty o błędach w PowerShell ze wszystkimi aplikacjami, które próbuję usunąć.
Ryakna
Jeśli nadal tak się dzieje, gdy PowerShell jest wywoływany z opcją „Uruchom jako administrator”, oznacza to, że coś jest bardzo nie tak na tym komputerze. Jeśli jest to problem ze sklepem, wypróbuj te 5 porad, aby rozwiązać problemy ze sklepem Windows i aplikacjami w systemie Windows 10 .
harrymc
@harrymc Nie działało przy użyciu$packageBase = "xboxapp", "officehub", "skypeapp"
JinSnow
1

Aktualizacja Windows Anniversary, wprowadziła sporo zmian, które uniemożliwiają wyłączenie niektórych funkcji, takich jak Cortana lub usuwanie aplikacji oficjalnymi środkami. Niektóre aplikacje, takie jak Microsoft Xbox, uważały ją za ważną aplikację dla systemu, uniemożliwiając oficjalne sposoby jej usunięcia.

Jeśli przejdziesz do menu Start, możesz kliknąć go prawym przyciskiem myszy i kliknąć opcję odinstaluj, i odwrotnie, możesz kliknąć przycisk Start, przejść do ustawień, a następnie aplikacji i funkcji i stamtąd odinstalować.

Teraz, jeśli nalegasz na usunięcie tych aplikacji. Są one przechowywane, C:\windows\SystemAppsabyś mógł znaleźć folder, w którym jest przechowywany, i po prostu usunąć folder, lub bezpieczniejszą opcją jest zmiana nazwy i dodanie znaku, takiego jak znak podkreślenia _na końcu nazwy.

Po prostu dodaj, jeśli usuniesz folder lub zmienisz jego nazwę w folderze systemapps, technicznie nie jest to odinstalowanie, a raczej wymuszone usunięcie go, jeśli usuniesz folder, który może pozostawić zainstalowane inne rzeczy, takie jak klucze rejestru i inne pliki w innym miejscu niż używa, ale nie znajduje się w folderze systemapps, lub wymusza jego uruchomienie, jeśli zmienisz nazwę folderu.

Jak powiedział Ryakna w komentarzach poniżej, użycie jednej z tych dwóch opcji może spowodować problemy w późniejszym okresie, jednak z mojego doświadczenia nie spotkałem żadnych problemów, w tym aktualizacji. Ale nadal zaleca się odinstalowanie za pomocą oficjalnych środków, albo za pomocą programu PowerShell, jeśli go znasz, lub za pomocą opcji programów i funkcji lub opcji menu. Nazwy SystemAppsfolderu nie należy zmieniać ani usuwać, ponieważ w takim przypadku najprawdopodobniej wystąpią problemy niż w przypadku zmiany nazwy lub usunięcia folderu w folderze systemapps.

Frostalf
źródło
Dziękuję za Twój czas. Problem polega na tym, że ten obraz systemu Windows pochodzi z listopada i nie jest jeszcze podłączony do Internetu, więc nie został zaktualizowany. Poza tym właśnie próbowałem odinstalować sklep i kalkulator z aktualnego systemu Windows 10 przy użyciu tej samej metody i udało mi się to zrobić bez problemu.
Ryakna,
@Ryakna Ach, dobrze, zostawię moją odpowiedź na wypadek, gdyby ktoś chciał poznać alternatywne sposoby ich usunięcia lol
Frostalf
Nie mogę zmienić nazwy SystemAppsfolderu. Musiałem usunąć folder aplikacji Xbox za pomocą BleachBit, nie było to możliwe oficjalnie. Aplikacja Xbox jest nadal zainstalowana, lokalizacja procesu Game Bar to ~\Windows\System32. Czy można to bezpiecznie usunąć GameBar*i GamePanel*pliki?
user598527,
@ user598527 Jeśli aplikacja nie zostanie odinstalowana w oficjalny sposób (np. za pomocą programu PowerShell) i po prostu usunie folder lub zmieni jego nazwę, aplikacja tak naprawdę nie zostanie odinstalowana i może spowodować problemy w późniejszym okresie. Nie należy także zmieniać nazwy SystemAppsfolderu, ponieważ jest to niezbędne w systemie Windows 10. Informacje ogólne foldery aplikacji uniwersalnych systemu Windows dotyczą C:\Windows\SystemAppsplików aplikacji systemowych, C:\Program Files\WindowsAppsinnych plików aplikacji i C:\Users\Ryakna\AppData\Local\Packagesdanych aplikacji.
Ryakna
1
@ user598527 Prawdopodobnie usunąłeś niektóre z nich (istnieje wiele aplikacji Xbox AppX), ale myślę, że głównego szkieletu Xbox nie da się odinstalować. Uruchamiając Get-AppxPackage | Select Name, PackageFullNamePowerShell, możesz zobaczyć, że nadal masz Xbox AppX w swoim systemie. Myślę, że możesz usunąć pasek gry, jeśli zatrzymasz i wyłączysz usługi Xbox (Prawdopodobnie Xbox Live Networking Service)
Ryakna