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?
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"?
Les paquetages par étapes vous empêchent d'installer ce paquet en mode développement
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"?
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"?
Téléchargez
psexec
à partir des outils sysinternals, écrit par Mark RussinovichPour 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"
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
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.
Accédez à Services et arrêtez le service Windows Installer.
Ouvrez C:\ProgramData\Microsoft\Windows\AppRepository\et supprimez le fichier PackageRepository.edb.
Redémarrez le service Windows Installer.
Lancez Visual Studio en tant qu'administrateur.
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.
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 ....
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 ...
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
Sur Windows 10:
Tout d'abord, vous avez besoin d'un éditeur de base de données SQL tel que SqliteBrowser3.
C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
user
de la table "packageuser".tasklist /svc /fi "services eq StateRepository"
StateRepository-Machine.srd
original après la sauvegarde.Remarque: vous devez laisser votre propre entrée utilisateur affectée au package.
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é.
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.
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é.
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
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
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!