?

Log in

No account? Create an account
Павел aka Раджа
Восстановление сломанных приложений Microsoft Store. 
25-окт-2018 16:16



У меня в очередной раз случилась проблема с приложениями UWP. На этот раз из-за клонирования системы при замене диска. Некоторые приложения просто отказывались запускаться, ссылаясь на недоступность сети. Исправление приложений, сброс настроек и сброс кэша Магазина (wsreset.exe) не помогали никак. В списке обновлений висели ошибки с кодами "0x80242020" и "0x80073D0D". Поиск по кодам ошибок всё так же выводил на сброс Магазина.

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

Место хранения задаётся в "Параметрах".

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


И о методах, которыми я "лечил" приложения.

Метод первый.
Данный метод я применял к приложениям, которые самостоятельно ставил из Магазина.

  1. Найти приложение в меню "Пуск";
  2. Вызвать его контекстное меню;
  3. Выбрать пункт "Удалить" и подтвердить удаление.

После этого приложение можно будет заново установить из Магазина.

Метод второй.
Этот метод я использовал для приложений, которые не добавляют свои пункты в меню "Пуск". К ним относятся в основном шрифты и всякие плагины.

  1. Открыть раздел "Приложения" Настроек системы и дождаться загрузки списка установленных приложений;
  2. Пролистать список и найти приложение, которое отображается примерно так:
  3. Нажать кнопку "Удалить" и подтвердить удаление.
Теперь приложение можно переустановить из магазина.

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

Метод третий.
Этот метод я использовал для поврежденных системных приложений.

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

Данный способ я нашел на этой странице.

Нужно запустить интерпретатор PowerShell с правами администратора. Без этого не получится управлять даже своими приложениями.

Сначала надо получить список всех установленных приложений (список получится довольно длинный):

Get-AppxPackage -AllUsers > apps.txt

Для каждого установленного приложения будет примерно такой вывод:

Name                   : Microsoft.SkypeApp
Publisher : CN=Skype Software Sarl, O=Microsoft Corporation, L=Luxembourg, S=Luxembourg, C=LU
Architecture : X64
ResourceId :
Version : 14.33.41.0
PackageFullName : Microsoft.SkypeApp_14.33.41.0_x64__kzf8qxf38zg5c
InstallLocation : C:\Program Files\WindowsApps\Microsoft.SkypeApp_14.33.41.0_x64__kzf8qxf38zg5c
IsFramework : False
PackageFamilyName : Microsoft.SkypeApp_kzf8qxf38zg5c
PublisherId : kzf8qxf38zg5c
PackageUserInformation : {S-1-5-21-2505290738-3670303574-3611287779-1001 [Radjah]: Installed}
IsResourcePackage : False
IsBundle : False
IsDevelopmentMode : False
NonRemovable : False
Dependencies : {Microsoft.NET.Native.Framework.1.7_1.7.25531.0_x64__8wekyb3d8bbwe, Microsoft.NET.Native.Runti
me.1.7_1.7.25531.0_x64__8wekyb3d8bbwe, Microsoft.VCLibs.140.00_14.0.26706.0_x64__8wekyb3d8bbwe
, Microsoft.SkypeApp_14.33.41.0_neutral_split.scale-100_kzf8qxf38zg5c}
IsPartiallyStaged : False
SignatureKind : Store
Status : Ok

Теперь в файле надо отыскать значение "Name" для нужного приложения. В конце статьи по ссылке есть примеры, из которых можно взять маски для поиска, например, "Аксессуары Xbox" - это "Microsoft.XboxDevices", а "Меню игры" - это "Microsoft.XboxGamingOverlay".

По найденному идентификатору можно удалить приложение с помощью такой команды:

Get-AppxPackage Microsoft.XboxDevices|Remove-AppxPackage

На этом этапе приложение удалено из системы, но исходная версия всё ещё доступна на диске по пути из параметра "InstallLocation". Для приложения "Аксессуары Xbox" у меня этот параметр равен "C:\Program Files\WindowsApps\Microsoft.XboxDevices_300.1806.18002.0_x64__8wekyb3d8bbwe". Дописав к пути "\AppXManifest.xml", можно переустановить приложение следующей командой:

Add-AppxPackage -DisableDevelopmentMode -Register "C:\Program Files\WindowsApps\Microsoft.XboxDevices_300.1806.18002.0_x64__8wekyb3d8bbwe\AppXManifest.xml"

Приложение либо сразу появится в списке, либо начнёт штатным образом устанавливаться из Магазина.

Если каких-то глобальных повреждений нет, то этих способов должно хватить.

Читать запись в блоге "Заметки дядюшки Раджи"

Комментарии 
25-окт-2018 15:21
Если мы всё равно используем PowerShell, то как насчёт полностью автоматизировать процесс?

$AppxPackages = Get-AppxPackage
ForEach ($AppxPackage in $AppxPackages)
{
Remove-AppxPackage $AppxPackage
Add-AppxPackage -DisableDevelopmentMode -Register `"$AppxPackage.InstallLocation.xml`"
}
25-окт-2018 15:23
Слишком убойно получилось у тебя.

В моём случае сломались приложения, которые были на диске E:. Приложения на других дисках работали нормально.

Сломанное приложение выглядит как-то так https://pastebin.com/raw/bZwwnckm

Status: PackageOffline, DataOffline, NotAvailable

Edited at 2018-10-25 15:29 (UTC)
25-окт-2018 15:33
Ну тогда хоть сразу убрать лишний текст:
Get-AppxPackage -AllUsers|Select Name,InstallLocation > apps.txt

Edited at 2018-10-25 15:34 (UTC)
25-окт-2018 15:50

$AppxPackages = Get-AppxPackage -AllUsers
ForEach ($AppxPackage in $AppxPackages)
{
$InstallLocation = $AppxPackage.InstallLocation
If ($InstallLocation -like "e:\*")
{
Remove-AppxPackage $AppxPackage
Add-AppxPackage -DisableDevelopmentMode -Register `"$InstallLocation.xml`"
}}


Edited at 2018-10-25 15:50 (UTC)
25-окт-2018 16:10
Там скорее по статусу искать надо и по каким-то признакам, что оно системное, потому что после удаления пользовательского InstallLocation уже не существует.
Страница загружена дек 12 2018, 3:13 pm GMT.