Восстановление хранилища компонентов при помощи средства проверки готовности системы к обновлению (SURT)

Метки:  , , , , , ,

Сегодня вашему вниманию предоставляется еще одно пополнение цикла статей о методах восстановления хранилища компонентов Windows. Помимо изобретения широкой общественностью бесчисленного множества "наколеночных" методик восстановления работоспособности компонентной модели, сами разработчики из Microsoft предлагают вполне официальные методы. В данной публикации мы рассмотрим один из подобных методов, который заключается в восстановлении хранилища компонентов при помощи средства проверки готовности системы к обновлению или, иными словами восстановлении хранилища компонентов при помощи SURT. Фактически описываемым методом предусматривается проверка каталогов/файлов компонентной модели при помощи специализированного пакета и попытка устранения найденных ошибок.

Метод подходит только для операционной системы Windows 7. Для более новых ОС (Windows 8+) средство SURT не требуется, поскольку весь функционал интегрирован в систему и доступен через API стека обслуживания, из скриптов Powershell и сервисной утилиты dism.exe. Это подтверждают высказывания некоторых сотрудников Microsoft: Instead of needing to download and run a separate tool, the diagnostic and repair functionality in the System Update Readiness Tool is now built into Windows in Windows 8 and Windows Server 2012.

Что же это за средство проверки готовности системы к обновлению?

Средство проверки готовности системы к обновлению (System Update Readiness Tool, SURT, CheckSUR) - утилита, поставляемая в виде пакета обновления (с целью включения эталонных файлов хранилища компонентов), предназначающаяся для устранения проблем хранилища компонентов Windows.

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

Первый запуск SURT

Для начала скачиваем пакет KB947821 для вашей версии и разрядности системы. Запускаем только что выкачанный пакет обновления с повышенными привилегиями.

surt

Поскольку SURT представляет собой утилиту, в процессе выполнения кода образа KB947821, он обнаруживает несоответствия (фактически ошибки) в хранилище пакетов и пытается исправить их, если находит соответствующие файлы для восстановления в собственной внутренней базе (полезной нагрузке пакета обновления).
После завершения процесса установки SURT в систему, появится сообщение Установка завершена, закрываем окно нажатием кнопки Закрыть. Результатом работы утилиты является файл отчета о проверке хранилища компонентов на наличие разного рода ошибок.

Анализ результатов

После окончания установки (статус: Установка завершена) проверяем лог-файл %Windir%\Logs\CBS\CheckSUR.log на предмет наличия записей об ошибках. На наличие проблем в хранилище компонентов обычно указывают сообщения о найденных ошибках (Found X errors) или недоступных файлов для восстановления (Unavailable repair files):

По изначальному замыслу разработчиков, средство SURT предназначалось для автоматического исправления найденных в хранилище компонентов ошибок, именно для этого в продукт поместили полный каталог эталонных файлов. Тем не менее, со временем ситуация изменилась:

..в последний раз SURT обновлялся в октябре 2014 года (о чем есть информация на странице загрузки Microsoft), а исправлений на операционную систему с того момента вышло довольно большое количество, соответственно многие файлы в каталоге средства попросту отсутствуют.

Вот именно поэтому, в случае обнаружения в лог-файле %Windir%\Logs\CBS\CheckSUR.log (битых) ненайденных файлов для восстановления, у нас имеется несколько вариантов решения.

Вариант 1: файловая часть

  • Проверяем результаты работы утилит восстановления хранилища в лог-файле %Windir%\Logs\CBS\CheckSUR.log. В зависимости от наименования проблемных файлов пакетов можно найти соответствующее обновление (KB). Например, в файле журнала могут быть обнаружены следующие данные:

    Очевидно, что поврежденный пакет в данном конкретном случае — это KB3037574. В этом случае есть несколько возможных вариантов решений:

    1. найти перечисленные выше файлы на работоспособной операционной системе аналогичной редакции/версии;
    2. скачать обновление KB??????, к которому принадлежит недостающие файлы (название обновления видно в названиях ненайденных файлов), из Центра загрузок Майкрософт или Центра обновления Майкрософт или попросту используя поиск. Затем распаковать из скачанного обновления все необходимые файлы.
  • Все найденные/извлеченные недостающие файлы разместить в системе следующим образом:
    • *.mum- и *.cat-файлы складываются в %Windir%\Temp\CheckSUR\servicing\packages;
    • *.manifest-файлы складываются в %Windir%\Temp\CheckSUR\winsxs\manifests\;
  • Повторно запустить SURT;

Вариант 2: реестровая часть

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

Как мы помним, у компонентной модели Windows имеется часть, размещающаяся в реестре операционной системы.

  • запускаем редактор реестра regedit.exe;
  • перемещаемся в ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages и для каждого найденного проблемного файла повторяем следующие шаги:
    • ищем интересующий нас подключ реестра (например, Package_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0.mum);
    • меняем разрешения безопасности подключа: выделяем (ставим курсор) интересующую нас запись, нажимает правую кнопку мыши - пункт меню разрешения - выделяем курсором текущего пользователя - в нижней части окна ставим чекбокс напротив разрешения Полный доступ. Применяем изменения через кнопку OK;
    • выполняем удаление записи:

  • после удаления всех требуемых записей реестра, запускаем Центр обновления Windows и повторно инициируем поиск обновлений. После определения списка устанавливаемых обновлений, выполняем их установку. Проблемный пакет, в этом случае, должен быть повторно загружен и установлен.
  • после окончания процесса установки повторно запускаем SURT;

Вариант 3: удаление битого пакета

Этот вариант заключается в ручном удалении проблемного пакета из командной строки.

  • По тем же логам вычисляем наименование пакета, в нашем случае это Package_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0;
  • после этого пробуем удалить его при помощи утилиты dism:

    dism /Online /Remove-Package /PackageName:Package_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0

  • Выполняем повторный запуск SURT;

Повторный запуск SURT

После выполнения действий, описанных в вариантах решений (выше), необходимо повторно произвести запуск средства проверки готовности системы к обновлению (используя все тот же скачанный файл обновления KB947821). При повторном запуске средство проверки готовности системы к обновлению сможет "подхватить" распакованные и размещенные нами файлы из каталога %Windir%\Temp\CheckSUR и произвести восстановление хранилища компонентов. Если процедура восстановления завершилась успешно, то в лог-файле %Windir%\Logs\CBS\CheckSUR.log можно будет увидеть следующие записи:

Об успешном восстановлении хранилища компонентов при помощи средства проверки готовности системы к обновлению можно говорить в случае, когда в файле количество найденных ошибок (Found X errors) соответствует количеству исправленных (Fixed X errors), либо виден статус No errors detected.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *