it-swarm.dev

Como desinstalar um aplicativo que outro usuário instalou?

Eu continuo acertando esse problema quando tento depurar meus aplicativos do Windows 8 e há uma cópia já instalada em outra conta de usuário:

DEP0700: O registro do aplicativo falhou. Outro usuário já instalou uma versão empacotada deste aplicativo. Uma versão não empacotada não pode substituir isso. O pacote em conflito é {{{PackageName}}} e foi publicado por CN = {{{Certificate Stuff}}}. (0x80073cf9)

Às vezes, posso fazer login ou pedir a outra pessoa para fazer login na máquina e desinstalar o aplicativo. Como alternativa, posso alterar o nome/id do aplicativo, mas um nem sempre é possível e o outro é arriscado (não desejo verificar o id do aplicativo alterado no controle de origem).

Deve haver alguma maneira de desinstalá-lo. Talvez um script do PowerShell?

53
Filip Skakun

Meu processo acima ainda funciona, mas ele simplesmente contorna um problema de condição de corrida, no qual o Windows Update (sim, curiosamente) é responsável por eliminar "pacotes de teste".

Segundo a Microsoft , a "outra correção" - e ainda considero este problema um bug - é:

Causa do problema:

O Windows Update (WU) faz o download de versões mais recentes de pacotes que você possui e Os “encena” como Sistema Local, de modo que quando você acessa a loja para Atualizar os aplicativos, o processo de atualização é tão rápido que possível. WU irá Eventualmente limpar os pacotes de teste que nunca foram instalados.

Quais são algumas conseqüências de ter pacotes "Staged"?

  1. Pacotes preparados evitam que você instale esse pacote em particular no modo de desenvolvimento

  2. Pacotes encenados consomem algum espaço em disco, mas devido ao hardlinking, o efeito disso é mitigado. Se um arquivo é idêntico entre várias versões De um pacote, a implantação do appx vincula os arquivos em vez de Mantendo duas cópias separadas do mesmo arquivo.

Como encontro os pacotes "Staged"?

  1. Em um administrador powershell Prompt, o comando: 

    get-appxpackage -all

exibirá todos os pacotes na máquina. Para um pacote em etapas, o PackageUserInformation mostrará {S-1-5-18 [Usuário desconhecido]: Staged} 2. Usando a filtragem de powershell, para obter a lista de todos os pacotes de vários nomes, você poderia fazer:

get-appxpackage -all |% {if ($_.packageuserinformation.installstate -eq "Staged"){$_.packagefullname}}

Como posso me livrar dos pacotes "Staged"?

  1. Baixe psexec de ferramentas sysinternals, escritas por Mark Russinovich

  2. Para se livrar de todos eles, execute em um comando regular/elevado comando Prompt (não powershell):

psexec -s powershell -c "get-appxpackage | remove-appxpackage"

22
Auri Rahimzadeh

Se isso não funcionar, você também pode tentar o seguinte, que funcionou para mim. Note que isto é para minha máquina dev, não para uma máquina do usuário regular, então não sei como isso afetaria os não-devs :-P

  1. Apropriar-se das pastas c:\Arquivos de programas\WindowsApps e C:\ProgramData\Microsoft\Windows\AppRepository - dando acesso total ao administrador. Certifique-se de que o TrustedInstaller também tenha direitos Modify. Você também está tomando posse. Se você está desprevenido, isso é feito através das propriedades nessa pasta.

  2. Vá para Serviços e pare o serviço do Windows Installer.

  3. Abra C:\ProgramData\Microsoft\Windows\AppRepository\e exclua o arquivo PackageRepository.edb.

  4. Inicie o serviço do Windows Installer novamente.

  5. Inicie o Visual Studio como administrador.

  6. Tente iniciar seu aplicativo. Deve funcionar.

Depois de executar o aplicativo, uma vez você deve ser capaz de executar o VS no modo de usuário novamente.

21
Auri Rahimzadeh

Solução alternativa:

Se nada mais funciona para você (para mim também não), você pode apenas alterar o nome do seu pacote no manifesto do aplicativo (basta substituir os últimos caracteres por outros caracteres). Quando você faz isso, você não terá mais pacotes conflitantes 

Alterar o nome do pacote pode não ser apropriado para alguns cenários, mas você sempre pode fazer o backup e alterá-lo quando terminar a depuração no seu dispositivo problemático ....

17
hendrix

Houve um aprimoramento no Windows 10 1709 para o cmdlet remove-appxpackage, adicionando -allusers como uma opção.

Então, para desinstalar um aplicativo para todos os usuários, este comando funciona:

Get-AppxPackage -AllUsers [PackageFamilyName] | Remove-AppxPackage -AllUsers

Onde [PackageFamilyName] é geralmente o GUID do seu pacote.

Aviso/Advertência: O comando parece fazer a reinstalação (reprovisionamento do pacote usando o DISM) mais tarde muito difícil, já que parece tratar como se cada usuário tivesse desinstalado o aplicativo individualmente. Demais para entrar aqui ...

12
zax

Se você quiser excluir o aplicativo do usuário atual, tente:

Get-AppxPackage | where name -eq "APP.NAME" | Remove-AppxPackage

Isso me ajudou. Então, há Get-AppxPackage sem -all

11
Pavel Nazarov

no windows 10: 

Primeiro, você precisa de um editor de banco de dados SQL como o SqliteBrowser3

  1. Faça essa manipulação como usuário do sistema (use psexec ou outro) 
  2. Faça uma cópia de C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
  3. Abra essa cópia com o SqliteBrowser3 
  4. Você precisará editar a tabela "package", "packageuser" e "user". Para fazer isso, você precisará anotar o ID do usuário fantasma da tabela "user" e depois removê-los. Em seguida, remova as entradas com o ID do usuário fantasma na coluna user da tabela "packageuser".
  5. kill tasklist /svc /fi "services eq StateRepository"
  6. substitua o StateRepository-Machine.srd original após o backup.
  7. reiniciar e, em seguida, você pode remover seu pacote normalmente 

Nota: você precisa deixar sua própria entrada de usuário atribuída ao pacote

8
intika

Há um conjunto de cmdlets do PowerShell para gerenciar aplicativos da Windows Store. Você pode listar os aplicativos instalados na máquina para todos os usuários, se você executar o seguinte comando como administrador:

Get-AppxPackage -AllUsers

Eu não encontrei uma maneira de desinstalar um aplicativo para um usuário diferente, no entanto. Remove-AppxPackage funciona apenas para o usuário atual. Isso torna tudo ainda mais interessante se você excluir um usuário com aplicativos instalados. Pelo menos nas versões de pré-lançamento do Windows 8, isso tornava impossível excluir um aplicativo que ele havia instalado. Consegui evitar com sucesso essa situação desde o lançamento final, portanto, não posso confirmar se o problema ainda está presente, ou seja, os aplicativos não são desinstalados quando uma conta de usuário é excluída.

5
Damir Arh

Eu tive que fazer o seguinte:

 get-appxpackage -all > log.txt
 notepad log.txt (search for the offending PackageFullName)
 remove-appxpackage -allusers -package "PackageFullName"

A chave para mim foi adicionar o sinalizador -allusers, já que sem ele eu recebi um "... porque o usuário atual não tem esse pacote instalado. Use Get-AppxPackage para ver a lista de pacotes instalados "erro. 

3
Francois Nadeau

Embora isso não funcione para mim, pode funcionar apenas para outra pessoa ...

Inicie o powershell como administrador e execute:

Get-AppxPackage -all | Out-GridView -Passthru | Remove-AppXPackage

EntãoSELECIONEo pacote correto eOK, esperamos que ele seja removido.

3
Jawid Hassim

O que funcionou para mim

 1. Close VS
 2. Open Services
 3. Stop Appx Deployment Service
 4. Open C:\ProgramData\Microsoft\Windows\AppRepository\ and delete the PackageRepository.edb file.
 5. Start Appx Deployment Service
 6. Start VS & Debug - worked like charm
2
Stefan Michev

Isso é semelhante a algumas outras respostas, especialmente do @Pavel Nazarov, mas funciona para usuários diferentes. E é diferente da resposta aceita, porque você não precisa instalar nenhum programa.

No Windows Powershell no modo admin, execute: 

get-appxpackage -all | where name -eq "{{ App Name }}" | remove-appxpackage

2
kdazzle

Se tudo mais falhar e você estiver desesperado, como foi o meu caso (porque o usuário foi excluído) Este é um pouco perigoso, mas funcionou para mim.

FAÇA AT SEU PRÓPRIO RISCO! Eu sabia que meu usuário era o último usuário criado na máquina.

Esta resposta é uma combinação da resposta de Auri Rahimzadeh acima em TAKEOWN e na resposta da intika onde você modifica o StateRepository-Machine.srd usando 'DB Browser For SQLite' (baixado aqui: DB Browser para SQLite 3 ), a única diferença é Eu editei apenas uma coisa: Em PackageUser alterei o valor User _ ​​3 (Qual era o ID do usuário excluído anterior) para 4 (Que sou eu, o último usuário criado)

VERIFIQUE A TABELA USER E VEJA QUAIS VALORES FUNCIONAM EM SEU CASO!

0
Jawid Hassim