Không thể gỡ cài đặt Ứng dụng phổ thông qua PowerShell


11

Tôi đang trong quá trình gỡ cài đặt tất cả Ứng dụng phổ thông từ bản cài đặt Windows 10 mới khi tôi gặp chướng ngại vật.

Đây không phải là lần đầu tiên tôi làm điều này và nó luôn diễn ra tốt đẹp. Tuy nhiên, lần này, bất cứ khi nào tôi viết bằng PowerShell

Get-AppxPackage -allusers | Remove-AppxPackage

hoặc một cái gì đó cụ thể hơn như

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

tôi nhận được thông báo sau:

Remove-AppxPackage: Triển khai thất bại với HRESULT: 0x80073CFA, Loại bỏ thất bại. Vui lòng liên hệ với nhà cung cấp phần mềm của bạn. (Ngoại lệ từ HRESULT: 0x80073CFA) lỗi 0x80070032: Triển khai AppX Xóa hoạt động trên gói Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe từ: C: \ Chương trình tập tin \ WindowsApps

Ứng dụng này là một phần của Windows và không thể gỡ cài đặt trên cơ sở cho mỗi người dùng. Quản trị viên có thể cố gắng xóa ứng dụng khỏi máy tính bằng cách bật hoặc tắt Tính năng của Windows. Tuy nhiên, có thể không thể gỡ cài đặt ứng dụng.

LƯU Ý: Để biết thêm thông tin, hãy tìm [ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101 trong Nhật ký sự kiện hoặc sử dụng dòng lệnh Get-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd75

Tại dòng: 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


Tôi nhận được thông báo này cho mọi ứng dụng mà tôi cố gắng gỡ cài đặt, bao gồm cả những ứng dụng tôi biết hoàn toàn có thể gỡ cài đặt như máy tính hoặc trình xem hình ảnh, điều chưa từng xảy ra trước đây.
Powershell đang chạy trên cao và mọi thứ khác hoạt động và có vẻ bình thường.

Có điều gì tôi có thể làm ngoài việc cài đặt lại Windows không?


1
Hãy thử tập lệnh PowerShell trong mục cuối cùng của bài đăng này: Xóa sạch các ứng dụng hệ thống (bỏ qua lỗi 0x80073CFA) .
harrymc

Làm ơn hãy trả lời .
harrymc

@PIMP_JUICE_IT Nhưng đó là cài đặt lại tất cả các ứng dụng từ các gói được cung cấp SAU KHI gỡ cài đặt chúng khỏi tài khoản người dùng. Tôi không thể gỡ cài đặt bất kỳ trong số họ ở nơi đầu tiên, đó là vấn đề.
Ryakna

@Ryakna bạn đã kiểm tra bản hack mà tôi tìm thấy trên mạng chưa?
magicandre1981

Câu trả lời:


5

Bắt đầu với bản cập nhật Windows 10 Anniversary, Microsoft đã thêm một mục mới IsInboxtrong cơ sở dữ liệu SQLite C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srdcho các ứng dụng hộp thư đến. Và cố gắng loại bỏ ứng dụng bị gắn cờ là IsInboxthất bại với 0x80073CFA.

Nhưng có một cách giải quyết xấu xí, được phát hiện vào tháng 4 năm 2017 .

Bạn cần tải xuống và cài đặt các công cụ ProcessHackerDB Browser cho SQLite .

  • chạy ProcessHacker 2 với tư cách quản trị viên, chọn a C:\Windows\System32\svchost.exe, nhấp chuột phải và chọn Misc->Run as this user

nhập mô tả hình ảnh ở đây

Bây giờ chọn ở đây C:\Program Files\DB Browser for SQLite\DB Browser for SQLite.exevà bắt đầu nó. Trong Trình duyệt SQLite, nhấp vàoOpen database

nhập mô tả hình ảnh ở đây

và mở tệp C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd(thay đổi loại tệp trong hộp thoại mở thành tất cả các tệp để xem tệp).

Bây giờ, bấm vào Browse Datatab và thay đổi bảng thànhPackage

nhập mô tả hình ảnh ở đây

Bây giờ chọn ứng dụng bạn muốn gỡ bỏ và thay đổi 1 cho cột IsInboxđể 0và lưu các thay đổi.

nhập mô tả hình ảnh ở đây

lặp lại điều này cho tất cả các ứng dụng bạn muốn xóa và bây giờ các lệnh Powersehll sẽ hoạt động.

Nhưng tác giả viết, rằng Microsoft chặn nâng cấp lên các bản dựng Windows mới hơn nếu các ứng dụng hộp thư đến bị xóa. Vì vậy, hãy ghi nhớ điều này.


Cảm ơn rất nhiều vì thông tin này. Giúp tôi xóa thủ công ứng dụng cửa hàng bị hỏng mà không thể xóa bất kỳ cách nào khác (bao gồm cả vỏ điện).
ElDog

Có vẻ như điều này không còn hoạt động trong các bản dựng Windows 10 sau này. Cơ sở dữ liệu hiện chứa các kích hoạt chạy các hàm do người dùng xác định, do đó, mọi cập nhật đều thất bại ("Lỗi: không có chức năng như vậy: workid") nếu ứng dụng tải không cài đặt (các) chức năng cần thiết.
Tim Sylvester

@TimSylvester bạn muốn gỡ cài đặt ứng dụng nào? Năm 1903, bạn có thể gỡ cài đặt thêm các ứng dụng hộp thư đến.
magicandre1981

Xin chào, tôi biết điều này khá cũ nhưng tôi chỉ sử dụng máy tính xách tay vì nó không cập nhật và quá trình này có vẻ mơ hồ. Tôi không thể nhớ lại nếu thực tế tôi đã làm điều này, nhưng có cách nào để xác định xem tôi đã gỡ bỏ các ứng dụng hạn chế cập nhật (rõ ràng trên các hệ thống khác) không? Bất kỳ cách nào tôi có thể kiểm tra bằng PDQ Inventory để tôi có thể lấy danh sách các hệ thống bị ảnh hưởng và cuối cùng, nếu tôi cài đặt lại ứng dụng, liệu các bản nâng cấp trong tương lai có tiếp tục không? Hoặc bây giờ là phiên bản mới nhất của Windows bởi vì tôi nghĩ rằng MS khá là ngớ ngẩn để ngăn chặn các bản cập nhật về điều gì đó ngớ ngẩn này.
Jon Weinraub

@JonWeinraub trong phiên bản Windows 10 hiện tại, bạn có thể chính thức gỡ cài đặt thêm các ứng dụng hộp thư đến. Vì vậy, bạn có thể không cần nó
magicandre1981

4

Bài đăng Xóa sạch ứng dụng hệ thống (bỏ qua lỗi 0x80073CFA) chứa tập lệnh PowerShell này:

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

Về việc sử dụng kịch bản này, tác giả nhận xét:

Bạn có thể thay đổi $ packBase thành các tên gói khác nhau.

Tôi đã không thử kịch bản này bản thân mình.


Cảm ơn câu trả lời của bạn. Tôi đã thử tập lệnh trong một số hệ thống khác và nó thực sự hoạt động với hầu hết tất cả các ứng dụng phổ quát, thậm chí một số ứng dụng thường không thể khắc phục được, tuy nhiên, trên hệ thống có vấn đề, vấn đề không may vẫn tồn tại và tập lệnh không hoạt động. Nó hiển thị chính xác các thông báo lỗi trong quyền hạn với tất cả các ứng dụng tôi cố gắng xóa.
Ryakna

Nếu điều này vẫn xảy ra khi PowerShell được gọi với "Chạy với tư cách quản trị viên", thì có gì đó rất sai trên máy tính đó. Nếu đây là sự cố với Cửa hàng, hãy thử 5 Mẹo sau để khắc phục sự cố Windows Store và Ứng dụng trong Windows 10 .
harrymc

@harrymc Nó không hoạt động bằng cách sử dụng$packageBase = "xboxapp", "officehub", "skypeapp"
JinSnow

2

Bản cập nhật Windows Anniversary, đã thực hiện một vài thay đổi ngăn bạn tắt một số tính năng nhất định, chẳng hạn như cortana hoặc xóa ứng dụng thông qua các phương tiện chính thức. Một số ứng dụng như ứng dụng xbox microsoft coi nó là một ứng dụng quan trọng đối với hệ thống, do đó ngăn chặn các phương tiện chính thức để loại bỏ nó.

Nếu bạn vào menu bắt đầu, bạn có thể nhấp chuột phải vào nó và nhấp vào gỡ cài đặt, ngược lại bạn có thể nhấn nút bắt đầu, đi đến cài đặt, sau đó ứng dụng và tính năng và gỡ cài đặt từ đó.

Bây giờ nếu bạn khăng khăng xóa các ứng dụng này. Chúng được giữ trong C:\windows\SystemAppsVì vậy, bạn có thể tìm thấy thư mục được giữ trong đó và chỉ cần xóa thư mục hoặc tùy chọn an toàn hơn là đổi tên nó và thêm một ký tự như dấu gạch dưới _vào cuối tên.

Chỉ cần thêm, nếu bạn xóa một thư mục hoặc đổi tên nó trong thư mục systemapps, thì về mặt kỹ thuật, đây không phải là gỡ cài đặt nó, mà chỉ cần gỡ bỏ nó một cách mạnh mẽ, nếu bạn xóa thư mục có thể để các thứ khác được cài đặt vẫn như các khóa đăng ký và các tệp khác ở nơi khác nó sử dụng nhưng không nằm trong thư mục systemapps hoặc buộc nó không chạy nếu bạn đổi tên thư mục.

Như Ryakna đã nói trong các bình luận bên dưới, sử dụng một trong hai tùy chọn này có thể gây ra sự cố sau này, tuy nhiên từ kinh nghiệm của tôi, tôi vẫn chưa gặp phải bất kỳ vấn đề nào, kể cả cập nhật. Nhưng nó vẫn được khuyến nghị gỡ cài đặt bằng các phương tiện chính thức, bằng cách sử dụng powershell nếu bạn quen thuộc với nó hoặc thông qua tùy chọn chương trình và tính năng hoặc tùy chọn menu. Không SystemAppsnên đổi tên hoặc xóa thư mục, vì nếu bạn làm điều này, rất có thể bạn sẽ gặp phải vấn đề hơn là bạn phải đổi tên hoặc xóa thư mục bên trong thư mục systemapps.


Cảm ơn vì đã dành thời gian cho tôi. Vấn đề là hình ảnh Windows này là từ tháng 11 và chưa được kết nối với internet nên chưa được cập nhật. Ngoài ra, tôi chỉ cố gắng gỡ cài đặt cửa hàng và máy tính từ một Windows 10 cập nhật bằng cách sử dụng cùng một phương pháp và có thể làm điều đó mà không gặp vấn đề gì.
Ryakna

@Ryakna À được rồi, tôi sẽ để câu trả lời của mình ở đó trong trường hợp ai đó muốn biết những cách khác để loại bỏ chúng lol
Frostalf

Tôi không thể đổi tên SystemAppsthư mục. Tôi đã phải xóa thư mục ứng dụng Xbox bằng BleachBit, bằng phương thức chính thức là không thể. Ứng dụng Xbox vẫn được cài đặt, vị trí quá trình Game Bar là ~\Windows\System32. Có an toàn để loại bỏ GameBar*GamePanel*các tập tin ở đó?
dùng598527

@ user598527 Nếu bạn không gỡ cài đặt ứng dụng thông qua các phương tiện chính thức (tức là thông qua PowerShell) và chỉ xóa hoặc đổi tên thư mục, ứng dụng không thực sự bị gỡ cài đặt và có thể gây ra sự cố sau này. Và bạn không nên đổi tên SystemAppsthư mục vì nó rất cần thiết trong Windows 10. FYI các thư mục Windows Universal Apps C:\Windows\SystemAppsdành cho các tệp ứng dụng hệ thống, C:\Program Files\WindowsAppscho các tệp ứng dụng khác và C:\Users\Ryakna\AppData\Local\Packagescho dữ liệu ứng dụng.
Ryakna

1
@ user598527 Có lẽ bạn đã xóa một số trong số chúng (có rất nhiều Xbox AppX) nhưng tôi nghĩ xương sống Xbox chính không thể gỡ cài đặt. Bằng cách chạy Get-AppxPackage | Select Name, PackageFullNametrên PowerShell, bạn có thể thấy bạn vẫn có Xbox AppX trong hệ thống của mình. Tôi nghĩ bạn có thể xóa thanh trò chơi nếu bạn dừng và vô hiệu hóa các dịch vụ Xbox (Có thể Xbox Live Networking Service)
Ryakna
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.