Tidak dapat menghapus Aplikasi Universal melalui PowerShell

11

Saya sedang dalam proses mencopot semua Aplikasi Universal dari instalasi Windows 10 baru ketika saya menemukan penghalang jalan.

Ini bukan pertama kalinya saya melakukan ini dan selalu berjalan dengan baik. Namun, kali ini, setiap kali saya menulis di PowerShell

Get-AppxPackage -allusers | Remove-AppxPackage

atau sesuatu yang lebih spesifik seperti

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

saya mendapatkan pesan berikut:

Remove-AppxPackage: Penempatan gagal dengan HRESULT: 0x80073CFA, Penghapusan gagal. Silakan hubungi vendor perangkat lunak Anda. (Pengecualian dari HRESULT: 0x80073CFA) kesalahan 0x80070032: AppX Deployment Hapus operasi pada paket Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe dari: C: \ Program Files \ WindowsApps \ Microsoft.WindowsCalculator_10.1605.b8w8w8w08

Aplikasi ini merupakan bagian dari Windows dan tidak dapat dihapus instalasinya per pengguna. Administrator dapat mencoba untuk menghapus aplikasi dari komputer menggunakan Hidupkan atau matikan Fitur Windows. Namun, tidak mungkin untuk menghapus aplikasi.

CATATAN: Untuk informasi tambahan, lihat [ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101 di Log Kejadian atau gunakan baris perintah Get-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd-c57520fbd101

Pada baris: 1 char: 49

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


Saya menerima pesan ini untuk setiap aplikasi yang saya coba hapus, termasuk yang saya tahu benar-benar dapat dihapus seperti kalkulator atau penampil gambar, yang belum pernah terjadi sebelumnya.
Powershell berjalan meninggi dan segalanya berjalan dan tampak normal.

Apakah ada yang bisa saya lakukan selain menginstal ulang Windows?

Ryakna
sumber
1
Coba skrip PowerShell di entri terakhir posting ini: Bersihkan penghapusan aplikasi sistem (bypass error 0x80073CFA) .
harrymc
Tolong jawab .
harrymc
@PIMP_JUICE_IT Tapi itu adalah menginstal ulang semua aplikasi dari paket yang disediakan SETELAH mencopotnya dari akun pengguna. Saya tidak bisa menghapus salah satu dari mereka di tempat pertama, itulah masalahnya.
Ryakna
@Ryakna apakah Anda sudah memeriksa retasan yang saya temukan di internet?
magicandre1981

Jawaban:

5

Dimulai dengan pembaruan Windows 10 Anniversary, Microsoft menambahkan entri baru IsInboxdalam database SQLite C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srduntuk aplikasi inbox. Dan mencoba untuk menghapus aplikasi aplikasi yang ditandai IsInboxgagal 0x80073CFA.

Tetapi ada solusi buruk, yang ditemukan pada April 2017 .

Anda perlu mengunduh dan menginstal alat ProcessHacker dan DB Browser untuk SQLite .

  • jalankan ProcessHacker 2 sebagai admin, pilih a C:\Windows\System32\svchost.exe, lakukan klik kanan dan pilih Misc->Run as this user

masukkan deskripsi gambar di sini

Sekarang pilih di sini C:\Program Files\DB Browser for SQLite\DB Browser for SQLite.exedan mulai. Di SQLite Browser, klikOpen database

masukkan deskripsi gambar di sini

dan buka file C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd(ubah tipe file dalam dialog terbuka ke semua file untuk melihatnya).

Sekarang, klik pada Browse Datatab, dan ubah tabel menjadiPackage

masukkan deskripsi gambar di sini

Sekarang pilih aplikasi yang ingin Anda hapus dan mengubah 1 untuk kolom IsInboxuntuk 0dan menyimpan perubahan.

masukkan deskripsi gambar di sini

ulangi ini untuk semua aplikasi yang ingin Anda hapus dan sekarang perintah Powersehll akan berfungsi.

Tetapi penulis menulis, bahwa Microsoft memblokir upgrade ke build Windows yang lebih baru jika aplikasi inbox dihapus. Jadi ingatlah ini.

magicandre1981
sumber
Terima kasih banyak untuk info ini. Membantu saya menghapus aplikasi toko yang rusak secara manual yang tidak mungkin dihapus dengan cara lain (termasuk catu daya).
ElDog
Tampaknya ini tidak lagi berfungsi di Windows 10 nanti. Basis data sekarang berisi pemicu yang menjalankan fungsi yang ditentukan pengguna, sehingga pembaruan apa pun gagal ("Kesalahan: tidak ada fungsi seperti itu: workid") jika aplikasi memuat tidak menginstal fungsi yang diperlukan.
Tim Sylvester
@TimSylvester aplikasi mana yang ingin Anda hapus? Pada tahun 1903 Anda dapat menghapus lebih banyak aplikasi kotak masuk.
magicandre1981
Hai, saya tahu ini sudah agak tua sekarang tetapi saya hanya nuked laptop karena itu tidak akan memperbarui dan melakukan proses ini agak akrab. Saya tidak dapat mengingat jika saya memang melakukan ini, tetapi apakah ada cara untuk menentukan apakah saya telah menghapus pembaruan yang membatasi aplikasi (jelas pada sistem lain)? Bagaimana saya dapat memeriksa menggunakan PDQ Inventory sehingga saya dapat mengambil daftar sistem yang terkena dampak, dan terakhir, jika saya menginstal ulang aplikasi, apakah pembaruan di masa mendatang akan dilanjutkan? Atau apakah ini diperdebatkan sekarang dengan Windows versi terbaru karena saya pikir ini agak konyol untuk mencegah pembaruan terhadap sesuatu yang konyol ini.
Jon Weinraub
@JonWeinraub dalam versi Windows 10 saat ini, Anda dapat secara resmi menghapus aplikasi inbox lainnya. Jadi, Anda mungkin tidak memerlukannya
magicandre1981
4

Posting Bersihkan penghapusan aplikasi sistem (bypass error 0x80073CFA) berisi skrip PowerShell ini:

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

Saat menggunakan skrip ini, penulis berkomentar:

Anda dapat mengubah $ packageBase ke berbagai nama paket.

Saya belum mencoba skrip ini sendiri.

harrymc
sumber
Terima kasih atas jawaban anda. Saya sudah mencoba skrip di beberapa sistem lain dan itu memang berfungsi untuk hampir semua aplikasi universal, bahkan beberapa yang biasanya tidak dapat dilepas, namun, pada sistem yang bermasalah, sayangnya masalah tetap ada dan skrip tidak berfungsi. Ini menunjukkan pesan kesalahan yang persis sama di PowerShell dengan semua aplikasi yang saya coba hapus.
Ryakna
Jika ini masih terjadi ketika PowerShell dipanggil dengan "Run as administrator", maka ada sesuatu yang sangat salah pada komputer itu. Jika ini merupakan masalah dengan Store, coba 5 Tips ini untuk Memperbaiki Windows Store dan Masalah Aplikasi di Windows 10 .
harrymc
@harrymc Tidak berfungsi menggunakan$packageBase = "xboxapp", "officehub", "skypeapp"
JinSnow
2

Pembaruan Hari Peringatan Windows, membuat beberapa perubahan yang mencegah Anda mematikan fitur tertentu, seperti cortana atau menghapus aplikasi melalui cara resmi. Beberapa aplikasi seperti aplikasi xbox microsoft menganggapnya sebagai aplikasi penting bagi sistem sehingga mencegah cara resmi untuk menghapusnya.

Jika Anda masuk ke menu mulai, Anda bisa klik kanan dan klik uninstall, sebaliknya Anda bisa kanan tombol start, pergi ke pengaturan, lalu aplikasi dan fitur dan uninstall dari sana.

Sekarang jika Anda ngotot menghapus aplikasi ini. Mereka disimpan di C:\windows\SystemAppsJadi Anda dapat menemukan folder itu disimpan dan hanya menghapus folder atau opsi yang lebih aman adalah dengan mengubah nama dan menambahkan karakter seperti garis bawah _ke akhir nama.

Hanya untuk menambahkan, jika Anda menghapus folder atau mengganti nama di dalam folder systemapps, ini secara teknis tidak mencopotnya, melainkan hanya dengan paksa menghapusnya, jika Anda menghapus folder yang dapat membiarkan hal-hal lain terinstal tetap seperti kunci registri dan file lain di tempat lain yang menggunakan tetapi tidak terletak di folder systemapps, atau memaksanya untuk tidak berjalan jika Anda mengganti nama folder.

Seperti yang dikatakan Ryakna dalam komentar di bawah, menggunakan salah satu dari dua opsi ini dapat menyebabkan masalah di kemudian hari, namun dari pengalaman saya, saya belum mengalami masalah, termasuk memperbarui. Tetapi masih disarankan untuk menghapus dengan cara resmi, baik dengan menggunakan PowerShell jika Anda terbiasa atau melalui opsi program dan fitur atau opsi menu. The SystemAppsfolder tidak boleh diganti atau dihapus, karena jika Anda melakukan ini, Anda akan menemui masalah kemungkinan besar daripada jika Anda adalah untuk mengubah nama atau menghapus sebuah folder di dalam systemapps folder.

Frostalf
sumber
Terima kasih atas waktunya. Masalahnya adalah bahwa gambar Windows ini berasal dari bulan November dan belum terhubung ke internet sehingga belum diperbarui. Selain itu, saya hanya mencoba untuk mencopot pemasangan toko dan kalkulator dari Windows 10 terbaru menggunakan metode yang sama dan dapat melakukannya tanpa masalah.
Ryakna
@Ryakna Ah ok, baiklah, saya akan meninggalkan jawaban saya di sana kalau-kalau ada yang ingin tahu cara alternatif untuk menghapusnya lol
Frostalf
Saya tidak bisa mengganti nama SystemAppsfolder. Saya harus menghapus folder aplikasi Xbox menggunakan BleachBit, tidak mungkin dengan cara resmi. Aplikasi Xbox masih diinstal, lokasi proses Game Bar adalah ~\Windows\System32. Apakah aman untuk menghapus GameBar*dan GamePanel*file di sana?
user598527
@ user598527 Jika Anda tidak menghapus instalan aplikasi melalui cara resmi (yaitu melalui PowerShell) dan hanya menghapus atau mengganti nama folder, aplikasi tidak benar-benar dihapus dan dapat menyebabkan masalah di kemudian hari. Dan Anda tidak boleh mengganti nama SystemAppsfolder karena itu penting di Windows 10. FYI folder Windows Universal Apps adalah C:\Windows\SystemAppsuntuk file aplikasi sistem, C:\Program Files\WindowsAppsuntuk file aplikasi lain dan C:\Users\Ryakna\AppData\Local\Packagesuntuk data aplikasi.
Ryakna
1
@ user598527 Anda mungkin telah menghapus beberapa dari mereka (ada banyak Xbox AppX) tapi saya pikir tulang punggung Xbox utama tidak dapat dihapus. Dengan menjalankan Get-AppxPackage | Select Name, PackageFullNamedi PowerShell Anda dapat melihat Anda masih memiliki Xbox AppX di sistem Anda. Saya pikir Anda dapat menghapus bilah permainan jika Anda menghentikan dan menonaktifkan layanan Xbox (Mungkin Xbox Live Networking Service)
Ryakna