четверг, 25 октября 2018 г.

Восстановление сломанных приложений Microsoft Store.




У меня в очередной раз случилась проблема с приложениями 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"

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

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