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

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

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

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

Должен быть какой-то способ удалить его. Возможно, PowerShell script?

Ответ 1

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

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

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

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

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

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

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

How do я find the "Staged" packages?

  1. В приглашении PowerShell администратора введите команду:

    get-appxpackage -all

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

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

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

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

  2. Чтобы избавиться от всех них, запустите обычную командную строку с правами администратора или с повышенными правами (не powershell):

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

Ответ 2

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

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

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

  • Откройте C:\ProgramData\Microsoft\Windows\AppRepository\и удалите файл PackageRepository.edb.

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

  • Запустите Visual Studio в качестве администратора.

  • Попытайтесь запустить приложение. Он должен работать.

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

Ответ 3

Обход

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

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

Ответ 4

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

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

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

Где [PackageFamilyName] - это обычно GUID вашего пакета.

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

Ответ 5

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

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

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

Ответ 6

В окнах 10:

Сначала вам нужен редактор базы данных SQL, такой как SqliteBrowser3

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

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

Ответ 7

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

Get-AppxPackage -AllUsers

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

Ответ 8

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

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

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

Ответ 9

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

Запустите powershell в качестве администратора и запустите:

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

Затем SELECT правильный пакет и ОК, надеюсь, он удалит.

Ответ 10

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

 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

Ответ 11

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

В Windows Powershell в режиме администратора запустите:

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

Ответ 12

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

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

Этот ответ представляет собой комбинацию ответа Auri Rahimzadeh выше на TAKEOWN и ответ intika, где вы изменяете StateRepository-Machine.srd, используя "Браузер DB для SQLite" (скачанный здесь: DB Browser для SQLite 3), единственное отличие - я только отредактировал одну вещь: В PackageUser я изменил значение Пользователь 3 (который был идентификатором предыдущего удаленного пользователя) до 4 (который является мной, последним созданным пользователем)

УБЕДИТЕСЬ, ЧТОБЫ ПРОВЕРЬТЕ таблицу Пользователь И СМОТРИТЕ, ЧТО ЦЕННОСТИ РАБОТАЮТ В ВАШЕМ СЛУЧАЕ!

Ответ 13

Я только что использовал get-appxpackage -all | where name -eq "PackageName" | remove-appxpackage -AllUsers на Win 10 v1903 после того, как попробовал много других вариантов, и это сработало. После этого я проверил наличие пакета, и он исчез.