Не удается удалить универсальные приложения с помощью PowerShell

Я был в процессе удаления всех универсальных приложений из новой установки Windows 10, когда я попал в блокпост.

Это не первый раз, когда я делаю это, и это всегда идет хорошо. Однако, на этот раз, когда я пишу в PowerShell



Get-AppxPackage -allusers | Remove-AppxPackage



или что-то более конкретное, например



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



я получаю следующее сообщение:



удалить-AppxPackage: сбой развертывания С HRESULT: 0x80073CFA, сбой удаления. Обратитесь к поставщику программного обеспечения. (Исключение из HRESULT: 0x80073CFA)
ошибка 0x80070032: развертывание AppX удалить операцию на пакет Microsoft.WindowsCalculator_10.1605.1582.0_х64__8wekyb3d8bbwe от: C:Program
ФайлыWindowsAppsMicrosoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe не удалось.

это приложение является частью Windows и не может быть удален для каждого пользователя. Администратор может попытаться
чтобы удалить приложение с компьютера, включите или выключите Компоненты Windows. Тем не менее, это не может быть возможно, чтобы удалить приложение.

Примечание: Для получения дополнительной информации, посмотрите на [значение activityid] 75c5fc31-фб20-0001-77fd-c57520fbd101 в журнал событий или использовать командную строку get-AppxLog -значение activityid
75c5fc31-fb20-0001-77fd-c57520fbd101

на линии: 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


я получаю это сообщение для каждого приложения, которое я пытаюсь удалить, в том числе те, которые я знаю, прекрасно удаляются, как калькулятор или просмотра изображений, который никогда не случалось раньше.

Powershell работает с повышенными привилегиями, а все остальное работает и кажется нормальным.




есть ли что-то, что я могу сделать, кроме переустановки Windows?

11
задан Ryakna
02.05.2023 5:43 Количество просмотров материала 3247
Распечатать страницу

3 ответа

начиная с Windows 10 юбилейное обновление, Microsoft добавила новую запись IsInbox в базе данных SQLite C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd для входящих приложений. И пытается удалить приложение приложение помечено как IsInbox выдает 0x80073CFA.

но есть некрасивый обходной путь, который был обнаружено в апреле 2017.

вам нужно скачать и установить инструменты ProcessHacker и DB Browser для SQLite.

  • выполнить ProcessHacker 2 в качестве администратора, выберите C:\Windows\System32\svchost.exe, сделайте правый клик и выберите Misc ->Run as this user

enter image description here

Теперь выберите здесь C:\Program Files\DB Browser for SQLite\DB Browser for SQLite.exe и запустить его. В браузере SQLite нажмите на Open database

enter image description here

и откройте файл C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd (измените тип файла в диалоговом окне открыть на все файлы, чтобы увидеть его).

теперь нажмите на Browse Data tab и измените таблицу на Package

enter image description here

Теперь выберите приложения, которые вы хотите удалить и изменить 1 для столбца IsInbox to 0 и сохранить изменения.

enter image description here

повторите это для всех приложений, которые вы хотите удалить, и теперь команды Powersehll должны работать.

но автор пишет, что Microsoft блокирует обновление до более новых сборок Windows, если входящие приложения удаленный. Так что имейте это в виду.

4
отвечен magicandre1981 2023-05-03 13:31

пост чистое удаление системных приложений (ошибка обхода 0x80073CFA) содержит этот сценарий 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))
}

при использовании этого скрипта автор замечает:

вы можете изменить $packageBase на другие имена пакетов.

Я не пробовал этот скрипт себе.

2
отвечен harrymc 2023-05-03 15:48

юбилейное обновление Windows, внесло немало изменений, которые не позволяют отключить некоторые функции, такие как Кортана или удаление приложений с помощью официальных средств. Некоторые приложения, такие как xbox app microsoft, считают его важным приложением для системы, тем самым предотвращая официальные средства для его удаления.

Если вы идете в меню Пуск, вы можете щелкнуть правой кнопкой мыши и нажмите кнопку Удалить, наоборот, вы можете прямо кнопку Пуск, перейдите в Настройки, а затем Приложения и функции и удалить его из там.

Теперь, если вы настаиваете на удалении этих приложений. Они хранятся в C:\windows\SystemApps Так что вы можете найти папку, в которой он хранится и просто удалить папку или более безопасный вариант, чтобы переименовать его и добавить символ, такой как подчеркивание _ до конца имени.

просто добавить, если вы удалите папку или переименовать его в папке systemapps, это технически не удалить его, а просто насильственно удалить его, если вы удалили папку, которая может оставить установлены и другие вещи, такие как ключи реестра и другие файлы в других местах, которые он использует, но не находится в папке systemapps, или заставляя ее работать, если вы переименовали папку.

как сказал Ryakna в комментариях ниже, использование любого из этих двух вариантов может вызвать проблемы позже по дороге, однако из моего опыта я еще не сталкивался с какими-либо проблемами, включая обновление. Но его по-прежнему рекомендуется удалить с помощью официальных средств, либо с помощью powershell, если вы знакомы с его помощью или с помощью программы и функции опции или опции меню. The SystemApps папка не должна быть переименована или удалена, как если бы вы сделали это, вы, скорее всего, возникнут проблемы, чем если бы Вы были переименовать или удалить папку внутри папки systemapps.

1
отвечен Frostalf 2023-05-03 18:05

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх