No se pueden desinstalar aplicaciones universales a través de PowerShell

11

Estaba en el proceso de desinstalar todas las aplicaciones universales de una nueva instalación de Windows 10 cuando llegué a un obstáculo.

No es la primera vez que hago esto y siempre sale bien. Sin embargo, esta vez, cada vez que escribo en PowerShell

Get-AppxPackage -allusers | Remove-AppxPackage

o algo más específico como

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

recibo el siguiente mensaje:

Remove-AppxPackage: la implementación falló con HRESULT: 0x80073CFA, la eliminación falló. Póngase en contacto con su proveedor de software. (Excepción de HRESULT: 0x80073CFA) error 0x80070032: Operación de eliminación de implementación de AppX en el paquete Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe de: C: \ Archivos de programa \ WindowsApps \ Microsoft.WindowsCalculator_10.1605.1582.0_x64.8webfd8.

Esta aplicación es parte de Windows y no se puede desinstalar por usuario. Un administrador puede intentar eliminar la aplicación de la computadora usando Activar o desactivar las características de Windows. Sin embargo, puede que no sea posible desinstalar la aplicación.

NOTA: Para obtener información adicional, busque [ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101 en el registro de eventos o use la línea de comando Get-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd-c57520fbd101

En línea: 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


Recibo este mensaje para cada aplicación que intento desinstalar, incluidas las que sé que son perfectamente desinstalables, como la calculadora o el visor de imágenes, lo que nunca antes había sucedido.
Powershell se está ejecutando elevado y todo lo demás funciona y parece normal.

¿Hay algo que pueda hacer además de reinstalar Windows?

Ryakna
fuente
1
Pruebe el script de PowerShell en la última entrada de esta publicación: Eliminación limpia de las aplicaciones del sistema (omita el error 0x80073CFA) .
harrymc
Por favor conteste .
harrymc
@PIMP_JUICE_IT Pero eso es reinstalar todas las aplicaciones de los paquetes aprovisionados DESPUÉS de desinstalarlas de la cuenta de usuario. No pude desinstalar ninguno de ellos en primer lugar, ese es el problema.
Ryakna
@Ryakna, ¿has revisado el truco que encontré en la red?
magicandre1981 01 de

Respuestas:

5

A partir de la actualización del aniversario de Windows 10, Microsoft agregó una nueva entrada IsInboxen la base de datos SQLite C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srdpara las aplicaciones de la bandeja de entrada. E intentar eliminar la aplicación marcada como IsInboxfalla con 0x80073CFA.

Pero hay una solución fea, que se descubrió en abril de 2017 .

Debe descargar e instalar las herramientas ProcessHacker y DB Browser para SQLite .

  • Ejecute ProcessHacker 2 como administrador, seleccione a C:\Windows\System32\svchost.exe, haga clic derecho y seleccione Misc->Run as this user

ingrese la descripción de la imagen aquí

Ahora seleccione aquí C:\Program Files\DB Browser for SQLite\DB Browser for SQLite.exey comience. En el navegador SQLite, haga clic enOpen database

ingrese la descripción de la imagen aquí

y abra el archivo C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd(cambie el tipo de archivo en el diálogo abierto a todos los archivos para verlo).

Ahora, haga clic en la Browse Datapestaña y cambie la tabla aPackage

ingrese la descripción de la imagen aquí

A continuación, seleccione las aplicaciones que desea eliminar y cambiar el 1 para la columna IsInboxde 0y guardar los cambios.

ingrese la descripción de la imagen aquí

repita esto para todas las aplicaciones que desea eliminar y ahora los comandos de Powersehll deberían funcionar.

Pero el autor escribe que Microsoft bloquea la actualización a las nuevas versiones de Windows si se eliminan las aplicaciones de la bandeja de entrada. Así que ten esto en cuenta.

magicandre1981
fuente
Gracias por esta información. Me ayudó a eliminar manualmente la aplicación de la tienda rota que no fue posible eliminar de ninguna otra manera (power shell incluido).
ElDog
Parece que esto ya no funciona en versiones posteriores de Windows 10. La base de datos ahora contiene activadores que ejecutan funciones definidas por el usuario, por lo que cualquier actualización falla ("Error: no existe tal función: workid") si la aplicación de carga no instala las funciones necesarias.
Tim Sylvester, el
@TimSylvester, ¿qué aplicación quieres desinstalar? En 1903 puede desinstalar más aplicaciones de la bandeja de entrada.
magicandre1981
Hola, sé que esto es bastante viejo ahora, pero acabo de bombardear una computadora portátil porque no se actualizará y hacer este proceso parece vagamente familiar. No recuerdo si realmente hice esto, pero ¿hay alguna manera de determinar si eliminé las aplicaciones que restringen la actualización (obviamente en otros sistemas)? De alguna manera, puedo verificar con PDQ Inventory para poder obtener una lista de los sistemas afectados y, por último, si reinstalo las aplicaciones, ¿se reanudarán las actualizaciones futuras? ¿O es ahora discutible con la última versión de Windows porque creo que es bastante tonto por parte de MS evitar actualizaciones sobre algo tan tonto?
Jon Weinraub
@JonWeinraub en la versión actual de Windows 10, puede desinstalar oficialmente más aplicaciones de la bandeja de entrada, por lo que es posible que no lo necesite
magicandre1981
4

La eliminación posterior limpia de las aplicaciones del sistema (omitir el error 0x80073CFA) contiene este script de 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))
}

Al usar este script, el autor comenta:

Puede cambiar $ packageBase a diferentes nombres de paquetes.

No he probado este script yo mismo.

harrymc
fuente
Gracias por tu respuesta. He probado el script en algunos otros sistemas y, de hecho, funciona para casi todas las aplicaciones universales, incluso algunas usualmente inamovibles, sin embargo, en el sistema problemático, el problema persiste y el script no funciona. Muestra exactamente los mismos mensajes de error en PowerShell con todas las aplicaciones que intento eliminar.
Ryakna
Si esto todavía sucede cuando se invoca PowerShell con "Ejecutar como administrador", entonces algo está mal en esa computadora. Si esto es un problema con la tienda, pruebe estos 5 consejos para solucionar problemas de la tienda y la aplicación de Windows en Windows 10 .
harrymc
@harrymc No funcionó usando$packageBase = "xboxapp", "officehub", "skypeapp"
JinSnow
2

La actualización de aniversario de Windows realizó algunos cambios que le impiden desactivar ciertas funciones, como cortana o eliminar aplicaciones a través de medios oficiales. Algunas aplicaciones como la aplicación xbox de microsoft la consideran una aplicación importante para el sistema, evitando así los medios oficiales para eliminarla.

Si ingresa al menú de inicio, puede hacer clic con el botón derecho en él y hacer clic en desinstalar, por el contrario, puede hacer clic con el botón derecho en el botón de inicio, ir a la configuración, luego a las aplicaciones y características y desinstalarlo desde allí.

Ahora, si insiste en eliminar estas aplicaciones. Se guardan C:\windows\SystemAppspara que pueda encontrar la carpeta en la que se encuentra y simplemente eliminar la carpeta o la opción más segura es cambiarle el nombre y agregar un carácter como el guión bajo _al final del nombre.

Solo para agregar, si elimina una carpeta o le cambia el nombre dentro de la carpeta systemapps, esto técnicamente no lo desinstala, sino que simplemente lo elimina con fuerza, si eliminó la carpeta que podría dejar otras cosas instaladas aún como claves de registro y otros archivos en otros lugares usa pero no se encuentra en la carpeta systemapps, o lo obliga a no ejecutarse si cambia el nombre de la carpeta.

Como dijo Ryakna en los comentarios a continuación, el uso de cualquiera de estas dos opciones puede causar problemas más adelante, sin embargo, según mi experiencia, aún no he encontrado ningún problema, incluida la actualización. Pero aún así se recomienda desinstalar por medios oficiales, ya sea usando powershell si está familiarizado con él o mediante la opción de programas y características o la opción de menú. La SystemAppscarpeta no debe ser renombrada o eliminada, ya que si hace esto, lo más probable es que encuentre problemas que si tuviera que renombrar o eliminar una carpeta dentro de la carpeta systemapps.

Frostalf
fuente
Gracias por tu tiempo. El problema es que esta imagen de Windows es de noviembre y aún no está conectada a Internet, por lo que no está actualizada. Además, solo intenté desinstalar la tienda y la calculadora de un Windows 10 actualizado usando el mismo método y pude hacerlo sin ningún problema.
Ryakna
@Ryakna Ah ok, bueno, dejaré mi respuesta allí en caso de que alguien quiera saber formas alternativas de eliminarlos lol
Frostalf
No puedo cambiar el nombre de la SystemAppscarpeta. Tuve que eliminar la carpeta de la aplicación Xbox con BleachBit, no fue posible por medios oficiales. La aplicación Xbox todavía está instalada, la ubicación del proceso de la barra de juegos es ~\Windows\System32. ¿Es seguro eliminar GameBar*y GamePanel*archivos allí?
user598527
@ user598527 Si no desinstala la aplicación a través de medios oficiales (es decir, a través de PowerShell) y simplemente elimina o cambia el nombre de la carpeta, la aplicación realmente no se desinstala y puede causar problemas más adelante. Y no debe cambiar el nombre de la SystemAppscarpeta, ya que es esencial en Windows 10. Para su información, las carpetas de Windows Universal Apps son C:\Windows\SystemAppspara archivos de aplicaciones del sistema, C:\Program Files\WindowsAppspara otros archivos de aplicaciones y C:\Users\Ryakna\AppData\Local\Packagespara datos de aplicaciones.
Ryakna
1
@ user598527 Probablemente haya eliminado algunos de ellos (hay muchos Xbox AppX), pero creo que el backbone principal de Xbox no se puede desinstalar. Al ejecutar Get-AppxPackage | Select Name, PackageFullNamePowerShell, puede ver que todavía tiene Xbox AppX en su sistema. Creo que puede eliminar la barra de juego si detiene y deshabilita los servicios de Xbox (Probablemente Xbox Live Networking Service)
Ryakna