Software microsoft windows currentversion component based servicing

Восстановление хранилища компонентов в Windows 8

Возвращаясь к технологии хранилища компонентов (Component Store)в Windows 8 рассмотрим сценарии его восстановления. Напомним, что начиная с Windows Vista Microsoft ввела концепцию компонентного обслуживания ОС (component based servicing). Благодаря компонентной структуре удалось добиться создания более стабильной системы установки/удаления обновлений, патчей и пакетов обновлений SP. Эта же система лежит в основе архитектуры Windows 8. Файлы хранилища компонентов Windows на диске располагаются в каталоге \Windows\WinSxS, имеющего свойство со временем значительно разрастаться в размерах (подробнее о том, почему размер этого каталога со временем растет и как уменьшить размер папки WinSxS читайте в этой статье).

Однако в некоторых случая хранилище компонентов может повреждаться, что приводит к проблемам при установке обновлений Windows и другого ПО Microsoft. Для восстановления хранилища компонентов в предыдущих версиях Windows (Windows Vista, Windows 7, Windows Server 2008 /R2) Microsoft разработала специальную утилиту — CheckSUR или System Update Readiness Tool (KB947821). Данная утилита является достаточно большой по размеру (более 350 Мб), и по мере выход новых обновлений Windows регулярно обновляется. Это означает, что каждый раз приходится выкачивать свежую версию CheckSUR.

Что же делает данная утилита? System Update Readiness Tool проверяет целостность следующих ресурсов:

    Файлы в каталогах:

  • %SYSTEMROOT%\Servicing\Packages
  • %SYSTEMROOT%\WinSxS\Manifests
    • Содержимое веток реестра:
    • %SYSTEMROOT%\WinSxS\Manifests
    • HKEY_LOCAL_MACHINE\Schema
    • HKEY_LOCAL_MACHINE\Components
    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing

    В том случае, если утилитой CheckSUR будут обнаружены ошибки или несоответствия, она попытается их восстановить.

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

    Список ошибок WindowsUpdate, вызванных повреждением хранилища компонентов

    Code Error Description
    0×80070002 ERROR_FILE_NOT_FOUND The system cannot find the file specified.
    0x8007000D ERROR_INVALID_DATA The data is invalid.
    0x800F081F CBS_E_SOURCE_MISSING The source for the package or file not found.
    0×80073712 ERROR_SXS_COMPONENT_STORE_CORRUPT The component store is in an inconsistent state.
    0x800736CC ERROR_SXS_FILE_HASH_MISMATCH A component’s file does not match the verification information present in the component manifest.
    0x800705B9 ERROR_XML_PARSE_ERROR Unable to parse the requested XML data.
    0×80070246 ERROR_ILLEGAL_CHARACTER An invalid character was encountered.
    0x8007370D ERROR_SXS_IDENTITY_PARSE_ERROR An identity string is malformed.
    0x8007370B ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME The name of an attribute in an identity is not within the valid range.
    0x8007370A ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE The value of an attribute in an identity is not within the valid range.
    0×80070057 ERROR_INVALID_PARAMETER The parameter is incorrect.
    0x800B0100 TRUST_E_NOSIGNATURE No signature was present in the subject.
    0×80092003 CRYPT_E_FILE_ERROR An error occurred while Windows Update reads or writes to a file.
    0x800B0101 CERT_E_EXPIRED A required certificate is not within its validity period when verifying against the current system clock or the time stamp in the signed file.
    0x8007371B ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE One or more required members of the transaction are not present.
    0×80070490 ERROR_NOT_FOUND Windows could not search for new updates.
    Читайте также:  Linux внешне как mac

    В Windows 8 и Windows Server 2012 функционал, аналогичный утилите CheckSUR, уже встроен в систему и называется Inbox Corruption Repair (встроенное восстановление компонентов). Встроенное восстановление компонентов может работает в двух режимах: фоновом и ручном. Фоновое восстановление автоматически запускается в случае появления ошибок при попытке установить обновление Windows Update. Windows в этом случае автоматически пытается исправить поврежденный компонент и переустановить пакет Windows Update. В том случае, если автоматическое восстановление не может самостоятельно исправить проблему, администратор может исправить ошибки вручную, восстановив работоспособное состояния хранилища компонентов. Сделать это можно с помощью утилиты обслуживания образа DISM (команда Dism /Online /Cleanup-Image) или с помощью Powershell (командлет Repair-WindowsImage).

    Чтобы проверить состояние хранилища компонентов, откройте командную строку с повышенными привилегиями и выполните:

    Советы.

    1. DISM в отличие от большинства утилит Windows чувствительна к регистру символов.
    2. Команда Dism /Cleanup-Image сохраняет логи в каталогах C:\Windows\Logs\CBS\CBS.log и C:\Windows\Logs\DISM\dism.log

    Аналогичная команда Powershell:

    Проверка CheckHealth займет несколько минут. Как вы видите, текущий статус хранилища компонентов в образе – Healthy (Здоровый), т.е. восстановление не требуется.

    В том случае, если будут обнаружены какие-то проблемы или ошибки, следует запустить процедуру восстановления хранилища командой:

    Аналогичная Powershell команда:

    В данном примере восстановление системных файлов прошло успешно:

    В том случае, если система самостоятельно не смогла восстановить некоторые компоненты в хранилище, вам может понадобится дистрибутив (установочный диск) Windows 8. Вставьте данный диск в привод или смонтируйте его iso образ. Допустим, диску с дистрибутивом назначена буква E. Получим список доступных версий Windows 8 на диске с помощью команды PoSH:

    В данном примере, мы видим, что на диске имеется только один образ (Windows 8 Pro) с индексом 1 (Index: 1).

    Следующая команда запустит восстановление хранилища с восстановлением повреждённых компонентов из оригинального образа Windows 8:

    , где 1 – индекс версии образа в дистрибутиве, полученный ранее.

    После завершения восстановления удостоверьтесь, что хранилище компонентов находится в работоспособном состоянии (статус: Healthy)

    Следующий (не всегда обязательный этап) – проверка целостности системных файлов с помощью команды:

    Software microsoft windows currentversion component based servicing

    Пока OneGet собирается стать package manager для винды, в винде уже некоторое время есть работающий менеджер пакетов. Называется он CBS (Component-Based Servicing). Он работает так, как положено нормальному менеджеру: помнит, какой файл кто перезаписал, и может удалить пакет А, если некоторые его файлы перезаписаны пакетом Б. Даже лучше, он хранит все версии файла с помощью WinSxS (Side-by-side assemblies). Он поддерживает обновление всех установленных пакетов через Windows Update (это та самая галочка “Получать обновления для других продуктов Майкрософт”).

    Читайте также:  Установить почтовый клиент по умолчанию windows 10

    Он содержит хоть и не исчерпывающую компонентизацию Windows, но гораздо большую, чем видно в системе на первый взгляд. Более подробной была только компонентизация XP Embedded в билдере. Вершину этого айсберга можно увидеть в “Установке и удалении программ”, “установка компонентов Windows”. Представленный там список – это так называемые Features. В CBS каждый пакет может содержать одну или несколько отключаемых опций, как компоненты установки в MSI. А число пакетов гораздо больше, большинство из них не содержат никаких Features.

    Но как обычно, кто-то в Майкрософт сделал полезное дело, а другой приказал всё спрятать и запретить. Большая часть пакетов скрыта, а сам CBS запрятан так глубоко в недра системы, что о нём почти никто не слышал. Прежде, чем им пользоваться, нужно посрывать некоторые предохранители. Считайте это проверкой, как в Гарри Поттере: некоторые заклинания можно использовать только тем волшебникам, которые сумели до них додуматься.

    Пакеты перечислены в
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\
    Чтобы нормально с ними работать, нужно взять ownership всего раздела Component Based Services с детьми + дать на него с детьми право записи Администраторам.

    Большая часть системных пакетов скрыта, у них Visibility=2. Чтобы пакеты были видны в dism.exe, нужно поставить 1.
    У любого пакета может быть подключ Owner, где перечислены родительские пакеты. В таком случае самостоятельно его удалить нельзя. Большая часть системных пакетов входит в состав родительских “гранд-пакетов” Windows Home, Windows Pro и Windows Enterprise. Чтобы их можно было удалять, нужно их оттуда исключить и сделать самостоятельными пакетами. Массово это делает утилита install_wim_tweak (видимость она тоже включает):
    install_wim_tweak /o

    Для управления пакетами есть утилита dism.exe:
    dism /Online /Get-Packages
    Показывает все установленные пакеты, у которых в параметре Visibility стоит 1.

    dism /Online /Get-Features
    Показывает все отключаемые компоненты (те, что видно в “Удаление компонентов Windows”). Компоненты группируются по пакетам, но у большинства пакетов компонентов нет, а видимые компоненты на самом деле лежат в паре виртуальных пакетов. В общем, простым взведением флагов компонентизировать остальные пакеты нельзя.

    dism /Online /Get-Features /Packagename=[имя]
    Можно убедиться, что у большинства пакетов выключаемых компонентов нет, и их можно только удалять.

    dism /Online /Remove-Package /Packagename=[имя]
    Удаляет пакет из системы навсегда. Чтобы восстановить его, /Add-Package придётся скормить установочный .cab-файл, которого у вас нет, так что думайте. Существует слабый шанс выдрать этот файл из установочного диска винды, но обычно там всё уже в распакованном виде. Скорее всего, для восстановления удалённых пакетов придётся делать repair-install системы.
    Обновления по удалённым пакетам приходить не будут.

    Почему /Online – потому, что dism может редактировать оффлайн-образы системы в папке. Также dism заодно умеет просматривать установки MSI с помощью /Get-Apps и устанавливать-удалять пакеты Appx (/Get-AppxPackage), чем все пользуются для удаления установленных в винду стильных модных калькуляторов.

    Читайте также:  Восстановление загрузчика windows через командную строку с флешки 10

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

    Как понять, какие пакеты что значат? Это сложно, у большинства пакетов названия неговорящие, а часто и не такие, как у конечного продукта. Пакеты также описаны в:
    C:\Windows\servicing\Packages
    На каждый там лежит XML-файл с описанием пакета, компонентов и обновлений, иногда есть описание (description), хотя редко. По ряду пакетов есть информация в MSDN, хотя она больше касается unattended installation и того, какие параметры пакета можно настроить. Кроме этого остаётся гуглить, часто название технологии что-нибудь подсказывает.

    Также во время обслуживания пакетов подключается ключ HKLM\COMPONENTS из C:\Windows\system32\config\COMPONENTS, который содержит много непонятной информации. Как с его помощью сопоставить файлы (assemblies) пакетам я пока не выяснил.

    Логи к CBS ведутся в C:\Windows\Logs\CBS, это волшебное место и при диагностике ошибок Windows Update.

    Пакеты, которые можно с удовольствием удалить:

    Ненужные фичи:
    Microsoft-Windows-OneDrive-Setup-Package – окончательно добивает OneDrive, который дедка бил-бил, не разбил.
    Microsoft-Windows-OfflineFiles-Package – кто-нибудь этим пользуется?
    Microsoft-Windows-Shell-HomeGroup-Package
    Microsoft-Windows-Shell-HomeGroup-Package-printscan
    Microsoft-Windows-EnterpriseClientSync-Host-Package – это WorkFolders.
    Microsoft-Windows-WorkplaceJoin-Package – ещё одна разновидность “синхронизации папок с работой”. Briefcase, OfflineFiles, WorkFolders, WorkplaceJoin, кто больше?
    Microsoft-Windows-PeerDist-Client-Package – BranchCache, если у вас сервера BranchCache-документов нет, то не нужен.

    Ненужные свистелки и бренчалки:
    Microsoft-Windows-Cortana-Package – но осторожно: возможно, удалится и поиск вообще
    Microsoft-OneCore-Networking-XboxLive-Package – некоторые другие пакеты по Xbox, возможно, не стоит удалять – какие-то игры могут на них рассчитывать
    Microsoft-OneCore-Networking-XboxLive-WOW64-Package

    Ненужные технологии:
    Microsoft-Hyper-V-* – Пакетов 30 на эту тему. Если адреналин задул в паруса души, можно поудалять.
    Microsoft-Windows-IIS-WebServer-Package – впрочем, отключается и из Features.
    Microsoft-Windows-IIS-WebServer-AddOn-Package
    Microsoft-Windows-IIS-WebServer-AddOn-2-Package

    Майкрософт следит за тобой:
    Microsoft-WindowsFeedback-Package
    Microsoft-Windows-Prerelease-Client-Package [он же Microsoft-Windows-DiagTrack-Package]

    CBS просто замечательны в том, что разбивают Винду на пакеты. Чего же в них недостаёт?
    1. Зависимостей между пакетами. Сейчас можно удалить пакет, который нужен другому пакету. В компонентизаторе Windows XP Embedded зависимости были, хотя зачастую пакеты и тянули за собой всё подряд потому, что их зависимости были плохо компонентизированы.
    2. Установки из онлайн-репозиториев. Здесь преуспевает OneGet, а CBS умеет устанавливать только cab-файлы.
    3. Регистрации нескольких репозиториев. Не все хотят обновляться только через Windows Update, какие-то программы хотели бы выкладывать обновления в собственных репозиториях.
    4. Подробной информации о содержимом пакета. Куча пакетов непонятно зачем нужна.

    Бонус!

    Пока я писал эту заметку, я написал свою собственную утилиту для управления пакетами! Называется CBSEnum:

    Она представляет их в виде дерева (хотя вообще в реестре они лежат кучей), позволяет удалять пачками, показывает какую-то справку, какую удалось добыть из Windows\servicing. Также может скрывать/восстанавливать пакеты от DISM.

    Оцените статью