Как удалить приложение, установленное другим пользователем?

Я продолжаю нажимать эту проблему, когда я пытаюсь отладить свои приложения Windows 8, и есть копия, уже установленная на другой учетной записи пользователя:

DEP0700: регистрация приложения не удалась. Другой пользователь уже установил упакованную версию этого приложения. Неупакованная версия не может заменить это. Конфликтующий пакет - {{{PackageName}}}, и он был опубликован CN={{{Certificate Stuff}}}. (0x80073cf9)

иногда я могу просто войти и спросить кто-то еще, чтобы войти в систему и удалить приложение. В качестве альтернативы я могу изменить имя/идентификатор приложения, но одно не всегда возможно, а другое рискованно (я не хочу проверять измененный идентификатор приложения на исходный код).

должен быть какой-то способ удалить его. Может скрипт PowerShell?

12 ответов


мой процесс выше все еще работает, но он просто обходит проблему состояния гонки, где Центр обновления Windows (да, как ни странно) отвечает за уничтожение "поэтапных пакетов"."

согласно Microsoft, "другое исправление" - и я все еще считаю эту проблему ошибкой-это:

причина проблемы:

Центр обновления Windows (WU) загружает новые версии пакетов, которые у вас есть и "этапы" их как локальная система, так что когда вы идете в магазин обновите приложения, процесс обновления происходит как можно быстрее. WU будет в конечном итоге очистите поэтапные пакеты, которые никогда не были установлены.

Каковы некоторые последствия наличия "постановочных" пакетов?

  1. поэтапные пакеты мешают вам установить этот конкретный пакет в режиме разработки

  2. поэтапные пакеты съедают некоторое дисковое пространство, но из-за жесткой связи эффект этого смягчается. Если файл идентичен между несколькими версии пакета, развертывание appx жестко связывает файлы вместо ведение двух отдельных копий одного файла.

как мне найти "постановочные" пакеты?

  1. в командной строке powershell администратора команда:

    get-appxpackage -all

отобразит все пакеты на машине. Для поэтапного пакета, этот PackageUserInformation покажет {S-1-5-18 [неизвестный пользователь]: Staged} 2. Используя фильтрацию powershell, чтобы получить список всех поэтапных packagefullnames, вы можете сделать:

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

как мне избавиться от" постановочных " пакетов?

  1. скачать psexec из инструментов sysinternals, написанных Марком Русиновичем

  2. чтобы избавиться от всех из них, запустите в обычной командной строке admin / elevated (не с помощью PowerShell):

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


Если это не сработает, вы также можете попробовать следующее, что сработало для меня. Обратите внимание, что это для моей машины dev, а не машины обычного пользователя, поэтому я не знаю, как это повлияет на не-разработчиков :-P

  1. сменить владельца папки c:\Program файлы\WindowsApps и C:\ProgramData\Microsoft\Windows\AppRepository - дает администратору полный доступ. Убедитесь, что TrustedInstaller также имеет права на изменение. Вы также принимаете на себя ответственность. Если вы не знаете, это сделано через свойства в этой папке.

  2. перейдите в раздел службы и остановите службу установщика Windows.

  3. открыть C:\ProgramData\Microsoft\Windows\AppRepository\ и удалите PackageRepository.файл ЕАБР.

  4. снова запустите службу установщика Windows.

  5. запустите Visual Studio от имени администратора.

  6. попытка запустить приложение. Он должен работа.

после запуска приложения, как только вы сможете запустить VS в пользовательском режиме снова.


решение:

Если ничто другое не работает для вас (для меня это тоже не так),вы можете просто изменить имя пакета в манифесте приложения (просто замените последние несколько символов другими символами). когда вы это сделаете, у вас больше не будет конфликтующих пакетов.

изменение имени пакета может не подходить для некоторых сценариев, но вы всегда можете создать резервную копию и изменить ее после завершения отладки на проблемное устройство....


Если вы хотите удалить приложение для текущего пользователя, то попробуйте:

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

это помогло мне. Так что есть Get-AppxPackage без -all


в windows 10:

во-первых, вам нужен редактор базы данных SQL, как SqliteBrowser3

  1. сделайте эту манипуляцию как пользователь системы (используйте psexec или иначе)
  2. скопировать C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
  3. откройте эту копию с помощью SqliteBrowser3
  4. вам нужно будет отредактировать таблицу" package"," packageuser "и" user". Для этого вам нужно будет записать идентификатор пользователя ghost из таблицы "user", а затем удалить их. Затем, удалить записи, имеющие идентификатор пользователя ghost в user столбец из таблицы "packageuser".
  5. убить tasklist /svc /fi "services eq StateRepository"
  6. заменить оригинал StateRepository-Machine.srd после резервного копирования.
  7. перезагрузка, а затем вы можете удалить свой пакет нормально

Примечание: вам нужно оставить свою собственную запись пользователя, назначенную пакету


в Windows 10 1709 было улучшено командлет remove-appxpackage, добавив в качестве опции-allusers.

Итак, чтобы удалить приложение для всех пользователей, эта команда работает:

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

где [PackageFamilyName] обычно является идентификатором GUID вашего пакета.

предостережение / предостережение: команда, похоже, делает повторную установку (повторную инициализацию пакета с помощью DISM) позже очень сложной, так как кажется, что каждый пользователь индивидуально удалил приложение. Слишком много, чтобы попасть сюда...


существует набор командлетов PowerShell для управления приложениями Магазина Windows. Вы можете перечислить установленные приложения на компьютере для всех пользователей, если выполните следующую команду от имени администратора:

Get-AppxPackage -AllUsers

Я не нашел способ удалить приложение для другого пользователя. Remove-AppxPackage работает только для текущего пользователя. Это делает все еще более интересным, если вы удалите пользователя с установленными приложениями. По крайней мере, в предварительных версиях Windows 8 это сделало невозможным чтобы удалить приложение, которое он установил. Мне удалось успешно избежать такой ситуации с момента окончательного выпуска, поэтому я не могу подтвердить, что проблема все еще присутствует, т. е. приложения не удаляются при удалении учетной записи пользователя.


хотя это не сработало для меня, это может сработать для кого-то другого...

запустите powershell от имени администратора и запустите:

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

затем выберите правильный пакет и OK, надеюсь, он будет удален.


что сработало для меня

 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

Это похоже на некоторые другие ответы, особенно @Павел Назаров, но работы для разных пользователей. И это отличается от принятого ответа, потому что вам не нужно устанавливать никаких программ.

в Windows Powershell в режиме администратора выполните:

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


Если все остальное терпит неудачу, и вы в отчаянии, как и в моем случае (потому что пользователь был удален), это немного опасно, но это сработало для меня.

ДЕЛАЙТЕ НА СВОЙ СТРАХ И РИСК! Я знал, что мой пользователь был последним пользователем, созданным на компьютере.

этот ответ представляет собой комбинацию ответа Аури Рахимзаде выше на взлет и ответа интики, где вы модифицируете StateRepository-машину.srd с помощью " DB Browser For SQLite "(скачать здесь:браузер БД для SQLite 3), единственная разница в том, что я редактировал только одну вещь: В PackageUser Я изменил значение пользователей 3 (который был идентификатором предыдущего удаленного пользователя) в 4 (это я, последний созданный пользователь)

ПРОВЕРЬТЕ пользователей таблица и посмотреть, какие значения работают в вашем случае!


Я должен был сделать следующее:

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

ключом для меня было добавить -очередь allusers флаг, так как без него я получил "...потому что у текущего пользователя не установлен этот пакет. Используйте Get-AppxPackage для просмотра списка установленных пакетов." ошибка.