Сегодня вашему вниманию предоставляется еще одно пополнение цикла статей о методах восстановления хранилища компонентов Windows. Помимо изобретения широкой общественностью бесчисленного множества "наколеночных" методик восстановления работоспособности компонентной модели, сами разработчики из Microsoft предлагают вполне официальные методы. В данной публикации мы рассмотрим один из подобных методов, который заключается в восстановлении хранилища компонентов при помощи средства проверки готовности системы к обновлению или, иными словами восстановлении хранилища компонентов при помощи SURT. Фактически описываемым методом предусматривается проверка каталогов/файлов компонентной модели при помощи специализированного пакета и попытка устранения найденных ошибок.
Что же это за средство проверки готовности системы к обновлению?
Представляет собой набор (базу) файлов компонентов, регулярно обновляемый (был, до некоторого времени) по мере выхода новых исправлений. Грубо говоря, утилита SURT это отличный способ для большинства пользователей проанализировать хранилище компонентов в собственной системе на разного рода повреждения, и иметь возможность устранить найденные повреждения в случае, если встроенная база имеет необходимые для восстановления файлы.
Первый запуск SURT
Для начала необходимо получить пакет обновления по ссылке KB947821. Находим на странице ссылку для соответствующей операционной системы и разрядности (например: Средство проверки готовности системы к обновлению для 64-разрядных (x64) версий Windows 7 (KB947821) [май 2014 г.]), напротив пункта жмем кнопку Загрузить и в открывшемся окне находим файл вида windows6.1-kb947821-v33-x64_09970839dac6c42dc911c5b945d0639b07cfc79a.msu. После скачивания запускаем пакет обновления.
Поскольку SURT представляет собой утилиту, в процессе выполнения кода образа KB947821, он обнаруживает несоответствия (фактически ошибки) в хранилище пакетов и пытается исправить их, если находит соответствующие файлы для восстановления в собственной внутренней базе (полезной нагрузке пакета обновления).
После завершения процесса установки SURT в систему, появится сообщение Установка завершена, закрываем окно нажатием кнопки Закрыть. Результатом работы утилиты является файл отчета о проверке хранилища компонентов на наличие разного рода ошибок.
Анализ результатов
После окончания установки (статус: Установка завершена) проверяем лог-файл %Windir%\Logs\CBS\CheckSUR.log на предмет наличия записей об ошибках. На наличие проблем в хранилище компонентов обычно указывают сообщения о найденных ошибках (Found X errors) или недоступных файлов для восстановления (Unavailable repair files):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
================================= Checking System Update Readiness. Binary Version 6.1.7601.24499 2019-07-16 14:04 Checking Windows Servicing Packages Checking Package Manifests and Catalogs Checking Package Watchlist Checking Component Watchlist Checking Packages Checking Component Store (f) CSI Manifest Zero Length 0x00000000 winsxs\Manifests\x86_microsoft-windows-directx-direct3d11_31bf3856ad364e35_7.1.7601.16492_none_e2d7c9f5b7176f4e.manifest x86_microsoft-windows-directx-direct3d11_31bf3856ad364e35_7.1.7601.16492_none_e2d7c9f5b7176f4e (f) CSI Manifest Zero Length 0x00000000 winsxs\Manifests\amd64_microsoft-windows-ie-htmlrendering_31bf3856ad364e35_11.2.9600.17843_none_f5715a5c3755cc36.manifest amd64_microsoft-windows-ie-htmlrendering_31bf3856ad364e35_11.2.9600.17843_none_f5715a5c3755cc36 Summary: Seconds executed: 2948 Found 2 errors CSI Manifest Zero Length Total count: 2 Unavailable repair files: winsxs\manifests\x86_microsoft-windows-directx-direct3d11_31bf3856ad364e35_7.1.7601.16492_none_e2d7c9f5b7176f4e.manifest winsxs\manifests\amd64_microsoft-windows-ie-htmlrendering_31bf3856ad364e35_11.2.9600.17843_none_f5715a5c3755cc36.manifest |
По изначальному замыслу разработчиков, средство SURT предназначалось для автоматического исправления найденных в хранилище компонентов ошибок, именно для этого в продукт поместили полный каталог эталонных файлов. Тем не менее, со временем ситуация изменилась:
Вот именно поэтому, в случае обнаружения в лог-файле %Windir%\Logs\CBS\CheckSUR.log (битых) ненайденных файлов для восстановления, у нас имеется несколько вариантов решения.
Вариант 1: файловая часть
- Проверяем результаты работы утилит восстановления хранилища в лог-файле %Windir%\Logs\CBS\CheckSUR.log. К примеру, в файле журнала могут быть обнаружены следующие данные:
12345678910. . .Unavailable repair files:servicing\packages\Package_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0.mumservicing\packages\Package_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0.mumservicing\packages\Package_1_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0.mumservicing\packages\Package_25_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0.mumservicing\packages\Package_2_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0.mumservicing\packages\Package_3_for_KB3037574~31bf3856ad364e35~amd64~~6.1.1.0.mumservicing\packages\Package_for_KB3037574_SP1~31bf3856ad364e35~amd64~~6.1.1.0.mum. . .После того, как вы определили имена, есть несколько возможных вариантов решений:
- найти указанные в логе файлы на работоспособной операционной системе аналогичной редакции/версии;
- по имени проблемных файлов пакетов найти соответствующее [родительское] обновление (KB??????), которому принадлежит недостающие файлы (в примере выше это KB3037574), скачать его из Центра загрузок Майкрософт или Центра обновления Майкрософт, или попросту используя поисковик. Затем распаковать из скачанного обновления все необходимые файлы.
- Все найденные/извлеченные недостающие файлы разместить в системе следующим образом:
*.mum
- и*.cat
-файлы складываются в %Windir%\Temp\CheckSUR\servicing\packages;*.manifest
-файлы складываются в %Windir%\Temp\CheckSUR\winsxs\manifests\;
- Повторно запустить SURT;
Вариант 2: удаление битого пакета
Этот вариант заключается в ручном удалении проблемного пакета из командной строки.
- По тем же логам вычисляем наименование пакета, в нашем случае это 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;
Если получаем ошибку, к примеру 0x8007005, ошибка 5, отказано в доступе.. тогда переходим к следующему методу.
Вариант 3: реестровая часть
Обычно этот вариант предлагается как последняя надежда, когда остальные способы оказались бессильны.
Как мы помним, у компонентной модели 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;
Повторный запуск SURT
После выполнения действий, описанных в вариантах решений (выше), необходимо повторно произвести запуск средства проверки готовности системы к обновлению (используя все тот же скачанный файл обновления KB947821). При повторном запуске средство проверки готовности системы к обновлению сможет "подхватить" распакованные и размещенные нами файлы из каталога %Windir%\Temp\CheckSUR и произвести восстановление хранилища компонентов. Если процедура восстановления завершилась успешно, то в лог-файле %Windir%\Logs\CBS\CheckSUR.log можно будет увидеть следующие записи:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
================================= Checking System Update Readiness. Binary Version 6.1.7601.22471 Package Version 26.0 2020-05-29 20:57 Checking Windows Servicing Packages Checking Package Manifests and Catalogs (f) CBS MUM Corrupt 0x800F080D servicing\Packages\Package_for_KB4022168_SP1~31bf3856ad364e35~amd64~~6.1.1.7.mum Line 3009: </ (fix) CBS MUM Corrupt CBS File Replaced Package_for_KB4022168_SP1~31bf3856ad364e35~amd64~~6.1.1.7.mum from Cabinet: C:\Windows\CheckSur\v1.0\windows6.1-7601-x64-clientcab4.cab. (fix) CBS Paired File CBS File also Replaced Package_for_KB4022168_SP1~31bf3856ad364e35~amd64~~6.1.1.7.cat from Cabinet: C:\Windows\CheckSur\v1.0\windows6.1-7601-x64-clientcab4.cab. Checking Package Watchlist Checking Component Watchlist Checking Packages Checking Component Store Summary: Seconds executed: 5121 Found 1 errors Fixed 1 errors CBS MUM Corrupt Total count: 1 Fixed: CBS MUM Corrupt. Total count: 1 Fixed: CBS Paired File. Total count: 1 |
Об успешном восстановлении хранилища компонентов при помощи средства проверки готовности системы к обновлению можно говорить в случае, когда в файле количество найденных ошибок (Found X errors) соответствует количеству исправленных (Fixed X errors). Статус No errors detected говорит о том, что ошибок не было изначально.
На мой взгляд не совсем оптимально. Особенно в большой корпоративной среде.
Если обновление SURT уже стоит в винде, то командой запускаем
dism /online /cleanup-image /scanhealth
Потом читаем лог сурта %SYSTEMROOT%\Logs\CBS\CheckSUR.log
Скачиваем апдейты которые указаны в логе.
Не переименовывая кладем их в папку %SYSTEMROOT%\CheckSUR\packages (Ее нет создаем)
Запускаем по новой
dism /online /cleanup-image /scanhealth
https://docs.microsoft.com/en-US/troubleshoot/windows-server/deployment/fix-windows-update-errors#how-to-fix-errors-that-are-found-in-the-checksur-log-file
И все собственно, компонентую модель удаленно же можно проверить
dism /online /get-features
а последняя команда для Win7 актуальна?
Да, конечно, все команды описанные в моем комментарии для Win7.
Ссылка на обновление KB947821 битая, поправьте пожалуйста
поправил, спасибо.