Неможливо видалити Universal Apps через PowerShell


11

Коли я потрапив у блокпост, я видалив усі Universal Apps із нової установки Windows 10.

Це не перший раз, коли я це роблю, і це завжди йде добре. Однак цього разу, коли я пишу в PowerShell

Get-AppxPackage -allusers | Remove-AppxPackage

чи щось більш конкретне, як-от,

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

я отримую таке повідомлення:

Remove-AppxPackage: Розгортання не вдалося з HRESULT: 0x80073CFA, видалення не вдалося. Зверніться до постачальника програмного забезпечення. (Виняток з HRESULT: 0x80073CFA) Помилка 0x80070032: AppX Розгортання Видалення операції на упаковці Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe з: C: \ Program Files \ WindowsApps \ Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe не вдалося.

Цей додаток є частиною Windows, і його неможливо видалити на основі користувача. Адміністратор може спробувати видалити програму з комп'ютера за допомогою Увімкнення та вимкнення функцій Windows. Однак видалити додаток можливо не вдасться.

ПРИМІТКА. Для отримання додаткової інформації шукайте [ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101 в журналі подій або використовуйте командний рядок Get-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd-c57520fbd101

На рядку: 1 знак: 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?


1
Спробуйте скрипт PowerShell в останньому записі цієї публікації: Очистіть видалення системних програм (помилка обходу 0x80073CFA) .
harrymc

Будь ласка, дайте відповідь на .
harrymc

@PIMP_JUICE_IT Але це перевстановити всі додатки із передбачених пакетів ПІСЛЯ видалення їх із облікового запису користувача. Я не міг видалити жоден із них, в першу чергу, в цьому і полягає проблема.
Рякна

@Ryakna Ви перевірили хак, який я знайшов у мережі?
magicandre1981

Відповіді:


5

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

Але є потворне рішення, яке було виявлено у квітні 2017 року .

Потрібно завантажити та встановити інструменти ProcessHacker та браузер DB для SQLite .

  • запустіть ProcessHacker 2 як адміністратор, виберіть a C:\Windows\System32\svchost.exe, натисніть правою кнопкою миші та виберіть Misc->Run as this user

введіть тут опис зображення

Тепер виберіть тут C:\Program Files\DB Browser for SQLite\DB Browser for SQLite.exeі запустіть його. У браузері SQLite натисніть наOpen database

введіть тут опис зображення

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

Тепер натисніть на Browse Dataвкладку та змініть таблицю наPackage

введіть тут опис зображення

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

введіть тут опис зображення

повторіть це для всіх програм, які ви хочете видалити, і тепер команди Powersehll повинні працювати.

Але автор роздратується, що Microsoft блокує оновлення до новіших версій Windows, якщо видалити додатки вхідних. Тож майте це на увазі.


Дякую за цю інформацію. Допоміг мені вручну видалити несправну програму магазину, яку неможливо було видалити іншим способом (включена оболонка живлення).
ElDog

Здається, що це не працює в наступних версіях Windows 10. Тепер база даних містить тригери, які виконують визначені користувачем функції, тому будь-яке оновлення не вдається ("Помилка: немає такої функції: workid"), якщо завантажувальна програма не встановлює необхідні функції.
Тім Сильвестр

@TimSylvester, яку програму ви хочете видалити? У 1903 році ви можете видалити більше вхідних програм.
magicandre1981

Привіт, я знаю, що це досить старе зараз, але я просто обдурив ноутбук, оскільки він не оновлювався, і цей процес здається нечітко знайомим. Я не можу згадати, чи дійсно я це робив, але чи є спосіб визначити, чи я видалив додатки, що обмежують оновлення (очевидно, в інших системах)? Будь-який спосіб, де я можу перевірити за допомогою інвентаря PDQ, щоб я міг схопити список постраждалих систем, і нарешті, якщо я перевстановлюю додатки, майбутні оновлення відновляться? Або це спір із останньою версією Windows, тому що я думаю, що MS досить нерозумно запобігати оновленням чогось такого нерозумного.
Джон Вайнрауб

@JonWeinraub у поточній версії Windows 10 ви можете офіційно видалити більше вхідних додатків. Тому вам це не знадобиться
magicandre1981

4

Пост Очищення видалення системних програм (помилка обходу 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 на різні назви пакунків.

Я сам не пробував цей сценарій.


Дякую за вашу відповідь. Я спробував сценарій у деяких інших системах, і він справді працює майже для всіх універсальних додатків, навіть для деяких, як правило, незмінних, однак у проблемній системі проблема, на жаль, зберігається, і сценарій не працює. Він показує абсолютно однакові повідомлення про помилки в оболонці з усіма програмами, які я намагаюся видалити.
Рякна

Якщо це все-таки трапляється, коли PowerShell викликається "Запустити як адміністратор", на цьому комп'ютері щось не так. Якщо це проблема з магазином, спробуйте скористатися цими 5 підказок щодо виправлення проблем Windows Store та додатків у Windows 10 .
harrymc

@harrymc Використовувати це не вдалося$packageBase = "xboxapp", "officehub", "skypeapp"
JinSnow

2

Оновлення Windows Anniversary внесло досить багато змін, які не дозволяють вам вимкнути певні функції, наприклад, cortana або видалити програми офіційними засобами. Деякі додатки, такі як програма xbox microsoft вважають це важливим додатком для системи, таким чином, заважаючи офіційним засобам видалити його.

Якщо ви перейдете до меню "Пуск", ви можете натиснути правою кнопкою миші та натиснути кнопку "Видалити", і навпаки, ви можете натиснути праву кнопку запуску, перейти до налаштувань, а потім додатків та функцій та видалити її звідти.

Тепер, якщо ви наполягаєте на видаленні цих додатків. Вони зберігаються в, C:\windows\SystemAppsщоб ви могли знайти папку, в якій вона зберігається, і просто видаліть папку, або більш безпечним варіантом є перейменування і додавання символу, такого як підкреслення, _до кінця імені.

Просто додати, якщо ви видалите папку або перейменовуєте її всередині папки systemapps, це технічно не видаляти її, а просто примусово видалити її, якщо ви видалили папку, яка могла б залишити інсталяцію інших речей, як ключі реєстру та інші файли в інших місцях, які він використовує, але не знаходиться в папці systemapps, або змушує його не запускатися, якщо ви перейменовували папку.

Як зазначив Рякна в коментарях нижче, використання будь-якого з цих варіантів може спричинити проблеми згодом на дорозі, проте, зі свого досвіду, я ще не стикаюся з будь-якими проблемами, включаючи оновлення. Але його все-таки рекомендується видалити офіційними засобами, або за допомогою повноважень, якщо ви знайомі з цим, або через опції програм та функцій або опцію меню. SystemAppsПапка не повинна бути перейменована або видалена, так як якщо ви зробите це, ви, швидше за все , проблеми стикаються з чим , якби ви перейменувати або видалити папку в папці systemapps.


Дякую за ваш час. Проблема полягає в тому, що це зображення Windows з листопада та ще не підключено до Інтернету, тому не оновлено. Крім того, я просто спробував видалити магазин та калькулятор із оновленої Windows 10 за тим самим методом і зміг це зробити без проблем.
Рякна

@Ryakna Ага, добре, я залишу свою відповідь там, якщо хтось захоче знати альтернативні способи їх видалення lol
Frostalf

Я не можу перейменувати SystemAppsпапку. Мені довелося видалити папку додатків Xbox за допомогою BleachBit, це було неможливо офіційними засобами. Додаток Xbox все ще встановлено, місце розташування процесу "Ігровий бар" ~\Windows\System32. Чи безпечно видалення GameBar*та GamePanel*файли там?
користувач598527

@ user598527 Якщо ви не видалите додаток офіційними засобами (тобто через PowerShell), а просто видаліть або перейменуйте папку, додаток насправді не видаляється і може спричинити проблеми пізніше в дорозі. І не слід перейменовувати SystemAppsпапку, як це важливо в Windows 10. FYI Папки Universal Universal Apps призначені C:\Windows\SystemAppsдля файлів системних додатків, C:\Program Files\WindowsAppsдля інших файлів додатків та C:\Users\Ryakna\AppData\Local\Packagesдля даних додатків.
Рякна

1
@ user598527 Деякі з них ви, мабуть, видалили (Xbox AppX дуже багато), але я думаю, що основну магістраль Xbox не можна видалити. Запустивши Get-AppxPackage | Select Name, PackageFullNamePowerShell, ви побачите, що у вас все ще є Xbox AppX у вашій системі. Я думаю, ви можете видалити ігрову панель, якщо зупините та відключите служби Xbox (Можливо Xbox Live Networking Service)
Ryakna
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.