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



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




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




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



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

1324   12  

12 ответов:

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

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

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

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

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

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

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

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

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

    get-appxpackage -all

отобразит все пакеты на машине. Для поэтапного пакета, этот PackageUserInformation покажет {S-1-5-18 [неизвестный пользователь]: постановка} 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 из таблицы "пользователь", а затем удалить их. Затем, удалите записи, имеющие ghost user id в 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

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

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

 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-Machine.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 для просмотра списка установленных пакетов." ошибка.

Comments

    Ничего не найдено.