Não é possível desinstalar aplicativos universais por meio do PowerShell

10

Eu estava no processo de desinstalar todos os aplicativos universais de uma nova instalação do Windows 10 quando acertei um obstáculo.

Não é a primeira vez que faço isso e tudo vai bem. No entanto, desta vez, sempre que escrevo no PowerShell

Get-AppxPackage -allusers | Remove-AppxPackage

ou algo mais específico como

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

Recebo a seguinte mensagem :

Remove-AppxPackage : Deployment failed with HRESULT: 0x80073CFA, Removal failed. Please contact your software vendor. (Exception from HRESULT: 0x80073CFA) error 0x80070032: AppX Deployment Remove operation on package Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe from: C:\Program Files\WindowsApps\Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe failed.

This app is part of Windows and cannot be uninstalled on a per-user basis. An administrator can attempt to remove the app from the computer using Turn Windows Features on or off. However, it may not be possible to uninstall the app.

NOTE: For additional information, look for [ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101 in the Event Log or use the command line Get-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd-c57520fbd101

At line: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


Eu estou recebendo esta mensagem para cada aplicativo que eu tento desinstalar, incluindo aqueles que eu sei que são perfeitamente desinstaláveis, como a calculadora ou o visualizador de imagens, o que nunca aconteceu antes. Powershell está funcionando elevado e tudo mais funciona e parece normal.

Existe algo que eu possa fazer além de reinstalar o Windows?

    
por Ryakna 20.08.2016 / 23:54

3 respostas

4

A partir da atualização do Windows 10 Anniversary, a Microsoft adicionou uma nova entrada IsInbox no banco de dados SQLite C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd para os aplicativos da caixa de entrada. E tentar remover o aplicativo app sinalizado como IsInbox falha com 0x80073CFA .

Mas há uma solução feia, que foi descoberta em abril de 2017 .

Você precisa baixar e instalar as ferramentas ProcessHacker e Navegador de banco de dados para SQLite .

  • execute o ProcessHacker 2 como administrador, selecione um C:\Windows\System32\svchost.exe , clique com o botão direito e selecione Misc - > Run as this user

AgoraselecioneaquiC:\ProgramFiles\DBBrowserforSQLite\DBBrowserforSQLite.exeeinicie-o.NonavegadordoSQLite,cliqueemOpendatabase

eabraoarquivoC:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd(mudeotipodearquivonacaixadediálogoabertaparatodososarquivosparavê-lo).

Agora,cliquenaguiaBrowseDataealtereatabelaparaPackage

Agora,selecioneosaplicativosquevocêdesejaremoverealtereo1dacolunaIsInboxpara0esalveasalterações.

repita isso para todos os aplicativos que você deseja remover e agora os comandos do Powersehll devem funcionar.

Mas o autor escreve que a Microsoft bloqueia a atualização para versões mais recentes do Windows se os aplicativos da caixa de entrada forem removidos. Então tenha isso em mente.

    
por 26.06.2017 / 17:28
2

O post Remoção limpa de aplicativos do sistema (ignorar o erro 0x80073CFA) contém este script do 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))
}

Ao usar esse script, o autor observa:

You can change $packageBase to different package names.

Eu não tentei este script sozinho.

    
por 26.08.2016 / 14:28
1

A atualização do Windows Anniversary fez algumas alterações que impedem que você desative determinados recursos, como o cortana ou a remoção de aplicativos por meios oficiais. Alguns aplicativos, como o xbox app microsoft, o consideraram como um aplicativo importante para o sistema, impedindo assim que os meios oficiais o removessem.

Se você entrar no menu Iniciar, clique com o botão direito do mouse e clique em desinstalar; por outro lado, você pode clicar no botão Iniciar, ir para configurações, aplicativos e recursos e desinstalá-lo de lá.

Agora, se você insiste em remover esses aplicativos. Eles são mantidos em C:\windows\SystemApps Então você pode encontrar a pasta em que ela é mantida e apenas remover a pasta ou a opção mais segura é renomear e adicionar um caractere como o sublinhado _ ao final do nome.

Apenas para adicionar, se você remover uma pasta ou renomeá-la dentro da pasta systemapps, isso não é tecnicamente desinstalá-la, basta removê-la com vigor, se você excluiu a pasta que poderia deixar outras coisas instaladas como chaves de registro e outras arquivos em outro lugar que ele usa, mas não localizado na pasta systemapps, ou forçá-lo a não ser executado se você renomeou a pasta.

Como Ryakna disse nos comentários abaixo, usar duas dessas opções pode causar problemas mais tarde, mas, pela minha experiência, ainda não encontrei nenhum problema, incluindo a atualização. Mas ainda é recomendado para desinstalar por meio oficial, seja usando powershell se você estiver familiarizado com ele ou através da opção de recursos e programas ou opção de menu. A pasta SystemApps não deve ser renomeada ou excluída, como se você fizesse isso, você provavelmente encontrará problemas do que se fosse renomear ou remover uma pasta dentro da pasta systemapps.

    
por 21.08.2016 / 00:46