it-swarm.com.ru

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

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

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

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

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

53
Filip Skakun

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

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

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

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

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

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

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

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

  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"

22
Auri Rahimzadeh

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

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

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

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

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

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

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

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

21
Auri Rahimzadeh

Обходной путь :

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

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

17
hendrix

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

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

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

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

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

12
zax

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

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

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

11
Pavel Nazarov

В Windows 10: 

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

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

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

8
intika

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

Get-AppxPackage -AllUsers

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

5
Damir Arh

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

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

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

3
Francois Nadeau

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

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

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

ЗатемВЫБЕРИТЕправильный пакет иOK, надеюсь, он удалится.

3
Jawid Hassim

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

 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

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

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

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

2
kdazzle

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

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

Этот ответ представляет собой комбинацию ответа Аури Рахимзаде выше на TAKEOWN и ответа intika, в котором вы изменяете StateRepository-Machine.srd с помощью «Браузер БД для SQLite» (загружено здесь: Браузер БД для SQLite 3 ), единственное отличие состоит в том, что Я только отредактировал одну вещь: В PackageUser я изменил значение User _ ​​3 (который был идентификатором предыдущего удаленного пользователя) на 4 (Это я, последний созданный пользователь)

ОБЯЗАТЕЛЬНО ПРОВЕРЬТЕ таблицу User и ВИДИТЕ, ЧТО РАБОТАЮТ В ВАШЕМ СЛУЧАЕ!

0
Jawid Hassim