web-dev-qa-db-fra.com

Comment désinstaller une application installée par un autre utilisateur?

Je continue à frapper ce problème lorsque j'essaie de déboguer mes applications Windows 8 et qu'une copie est déjà installée sur un autre compte d'utilisateur:

DEP0700: L'enregistrement de l'application a échoué. Un autre utilisateur a déjà installé une version packagée de cette application. Une version non empaquetée ne peut pas remplacer cela. Le package en conflit est {{{PackageName}}} et il a été publié par CN = {{{Certificate Stuff}}}. (0x80073cf9)

Parfois, je peux simplement me connecter ou demander à quelqu'un d'autre de se connecter à la machine et de désinstaller l'application. Sinon, je peux changer le nom/l'identifiant de l'application, mais l'un n'est pas toujours possible et l'autre est risqué (je ne souhaite pas archiver l'identifiant d'application modifié dans le contrôle de source).

Il doit y avoir un moyen de le désinstaller. Peut-être un script PowerShell?

53
Filip Skakun

Le processus ci-dessus fonctionne toujours, mais il évite simplement un problème de concurrence, dans lequel Windows Update (oui, curieusement) est chargé de supprimer les "packages mis en scène".

Selon Microsoft , le "autre correctif" - et je considère toujours ce problème comme un bogue - est le suivant:

Cause du problème:

Windows Update (WU) télécharge les versions les plus récentes des packages que vous avez et «Les met en scène» en tant que système local, de sorte que lorsque vous allez au magasin pour mettre à jour les applications, le processus de mise à jour est aussi rapide que possible. WU sera éventuellement nettoyer les paquets mis en scène qui n'ont jamais été installés.

Quelles sont les conséquences d'avoir des paquets "Staged"?

  1. Les paquetages par étapes vous empêchent d'installer ce paquet en mode développement

  2. Les paquets étagés consomment un peu d’espace disque, mais l’effet de cette liaison est atténué. Si un fichier est identique entre plusieurs versions d'un paquet, le déploiement d'appx lie durement les fichiers au lieu de conserver deux copies distinctes du même fichier.

Comment trouver les packages "Staged"?

  1. Dans une invite d’administrateur Powershell, la commande: 

    get-appxpackage -all

affichera tous les paquets sur la machine. Pour un package mis en scène, le fichier PackageUserInformation montrera {S-1-5-18 [Utilisateur inconnu]: Staged} 2. En utilisant le filtrage powershell, pour obtenir la liste de tous les noms de paquet staged, vous pouvez faire:

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

Comment me débarrasser des paquets "Staged"?

  1. Téléchargez psexec à partir des outils sysinternals, écrit par Mark Russinovich

  2. Pour vous débarrasser de tous, exécutez une invite régulière de commande admin/elevated (et non pas powershell):

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

22
Auri Rahimzadeh

Si cela ne fonctionne pas, vous pouvez également essayer les solutions suivantes, qui ont fonctionné pour moi. Notez que ceci s’applique à ma machine de développement, pas à la machine d’un utilisateur normal, donc je ne sais pas en quoi cela affecterait les non-développeurs :-P

  1. Prenez possession des dossiers c:\Program Files\WindowsApps et C:\ProgramData\Microsoft\Windows\AppRepository - en donnant un accès complet à l'administrateur. Assurez-vous que TrustedInstaller dispose également des droits de modification. Vous prenez également la propriété. Si vous n'êtes pas au courant, cela se fait via les propriétés de ce dossier.

  2. Accédez à Services et arrêtez le service Windows Installer.

  3. Ouvrez C:\ProgramData\Microsoft\Windows\AppRepository\et supprimez le fichier PackageRepository.edb.

  4. Redémarrez le service Windows Installer.

  5. Lancez Visual Studio en tant qu'administrateur.

  6. Essayez de lancer votre application. Ça devrait marcher.

Après avoir exécuté l'application, vous devriez pouvoir à nouveau exécuter VS en mode utilisateur.

21
Auri Rahimzadeh

Solution de contournement :

Si rien ne fonctionne pour vous (pour moi, cela n'a pas été le cas non plus), vous pouvez simplement changer le nom de votre paquet dans le manifeste de votre application (remplacez juste les derniers caractères par un autre) Quand vous faites cela, vous n'aurez plus de paquets en conflit.  

Changer le nom du paquet peut ne pas convenir à certains scénarios, mais vous pouvez toujours le sauvegarder et le changer une fois que vous avez terminé le débogage sur votre périphérique problématique ....

17
hendrix

Dans Windows 10 1709, une amélioration a été apportée à la cmdlet remove-appxpackage, en ajoutant -allusers en tant qu'option.

Donc, pour désinstaller une application pour tous les utilisateurs, cette commande fonctionne:

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

Où [PackageFamilyName] est généralement le GUID de votre package.

Mise en garde/Attention: la commande semble rendre très difficile la réinstallation ultérieure (réapprovisionner le package à l'aide de DISM), car il semble que ce soit comme si chaque utilisateur désinstallait l'application individuellement. Trop de choses à entrer ici ...

12
zax

Si vous souhaitez supprimer l'application de l'utilisateur actuel, essayez:

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

Ça m'a aidé. Donc, il y a Get-AppxPackage sans -all

11
Pavel Nazarov

Sur Windows 10: 

Tout d'abord, vous avez besoin d'un éditeur de base de données SQL tel que SqliteBrowser3.

  1. Faites cette manipulation en tant qu'utilisateur du système (utilisez psexec ou autre) 
  2. Faites une copie de C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
  3. Ouvrez cette copie avec SqliteBrowser3 
  4. Vous devrez éditer les tableaux "package", "packageuser" et "user". Pour ce faire, vous devez noter l'ID utilisateur fantôme dans le tableau "utilisateur", puis les supprimer. Ensuite, supprimez les entrées ayant l’identificateur d’utilisateur fantôme dans la colonne user de la table "packageuser".
  5. tuer tasklist /svc /fi "services eq StateRepository"
  6. remplacez le StateRepository-Machine.srd original après la sauvegarde.
  7. redémarrez et vous pourrez alors supprimer votre paquet normalement 

Remarque: vous devez laisser votre propre entrée utilisateur affectée au package.

8
intika

Il existe un ensemble d'applets de commande PowerShell pour la gestion des applications du Windows Store. Vous pouvez répertorier les applications installées sur la machine pour tous les utilisateurs si vous exécutez la commande suivante en tant qu'administrateur:

Get-AppxPackage -AllUsers

Je n'ai cependant pas trouvé de moyen de désinstaller une application pour un autre utilisateur. Remove-AppxPackage ne fonctionne que pour l'utilisateur actuel. Cela rend tout encore plus intéressant si vous supprimez un utilisateur ayant des applications installées. Au moins dans les versions préliminaires de Windows 8, il était impossible de supprimer une application qu'il avait installée. J'ai réussi à éviter une telle situation depuis la version finale. Je ne peux donc pas confirmer le problème, c'est-à-dire que les applications ne sont pas désinstallées lorsqu'un compte d'utilisateur est supprimé.

5
Damir Arh

Je devais faire ce qui suit:

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

La clé pour moi était d’ajouter le -allusers flag, sans quoi j’aurais reçu un "... car ce paquet n’a pas été installé. Utilisez Get-AppxPackage pour voir la liste des paquets installés. . " Erreur. 

3
Francois Nadeau

Bien que cela n'ait pas fonctionné pour moi, il se peut que cela fonctionne pour quelqu'un d'autre ...

Lancez Powershell en tant qu'administrateur et exécutez:

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

Ensuite,SÉLECTIONNEle bon package etOK, j'espère qu'il sera supprimé.

3
Jawid Hassim

Ce qui a fonctionné pour moi

 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

Ceci est similaire à d’autres réponses, notamment celle de @Pavel Nazarov, mais fonctionne pour différents utilisateurs. Et c'est différent de la réponse acceptée parce que vous n'avez pas besoin d'installer de programme.

Dans Windows Powershell en mode administrateur, exécutez: 

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

2
kdazzle

Si tout échoue et que vous êtes désespéré, comme ce fut mon cas (car l'utilisateur a été supprimé), celui-ci est un peu dangereux mais il a fonctionné pour moi.

FAITES AT VOTRE PROPRE RISQUE! Je savais que mon utilisateur était le dernier utilisateur créé sur la machine.

Cette réponse est une combinaison de la réponse ci-dessus d'Auri Rahimzadeh sur TAKEOWN et de celle d'Intika dans laquelle vous modifiez le StateRepository-Machine.srd à l'aide de 'DB Browser For SQLite' (téléchargé ici: DB Browser for SQLite 3 ), la seule différence J'ai seulement édité une chose: Dans PackageUser, j'ai changé la valeur Utilisateur _ ​​3 (qui était l'ID de l'utilisateur supprimé précédemment) en 4 _ (Qui est moi, le dernier utilisateur créé)

ASSUREZ-VOUS DE VÉRIFIER LA TABLE Utilisateur ET DE VOIR LES VALEURS QUI TRAVAILLENT DANS VOTRE CAS!

0
Jawid Hassim