Ошибка 0x8007371b при обновлении Windows: Повреждение хранилища компонентов
Транзакционная модель CBS и ошибка SXS
Код 0x8007371b переводится как ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE. Операционная система Windows (начиная с Vista) устанавливает системные обновления и компоненты с использованием строгой транзакционной модели (аналогично транзакциям в СУБД SQL). Механизм Component Based Servicing (CBS) записывает изменения в хранилище WinSxS. Если транзакция не может быть корректно завершена (Commit) — например, процесс TrustedInstaller был внезапно 'убит', часть реестра заблокирована антивирусом, или файл в WinSxS поврежден (NTFS corruption), система оставляет транзакцию 'незавершенной'. При следующей попытке обновления CBS видит 'грязную' транзакцию и отменяет установку с ошибкой 0x8007371b. Бизнес-риски: полная невозможность устанавливать любые будущие накопительные обновления (CU).
Механизмы коррупции транзакций
| Фактор сбоя | Влияние на CBS/WinSxS | Последствия (Логи CBS.log) |
|---|---|---|
| Сбой питания при установке | Система уходит в ребут во время 'Working on updates 50%'. Pending.xml остается в 'грязном' состоянии. | CBS: Failed to resolve execution chain. |
| Антивирусы (EDR) | Драйвер EDR (File System Filter) блокирует доступ TrustedInstaller к файлу в WinSxS на этапе Commit. | STATUS_ACCESS_DENIED внутри транзакции SXS. |
| Очистка реестра (Твикеры) | Удаление 'сиротских' ключей в ветке HKLM\COMPONENTS разрушает связи манифестов. | CBS: Failed to load identity/manifest. |
Алгоритм очистки и восстановления транзакций CBS
Сценарий 1: Очистка незавершенных операций (StartComponentCleanup)
Первый шаг — попытаться заставить DISM 'сбросить' зависшие транзакции и очистить мусор в хранилище компонентов.
Запуск от имени Администратора
DISM.exe /Online /Cleanup-Image /StartComponentCleanup
Если команда завершается успешно, запускаем стандартное восстановление:
DISM.exe /Online /Cleanup-Image /RestoreHealth
sfc /scannowСценарий 2: Принудительное удаление Pending.xml (WinRE)
Если система зациклилась на неудачной транзакции при загрузке (откат обновлений по кругу) или онлайн-DISM выдает ту же ошибку 0x8007371b.
- Загрузитесь в среду восстановления (WinRE -> Командная строка).
- Определите букву диска с Windows (например,
D:). - Перейдите в папку:
cd D:\Windows\WinSxS. - Переименуйте или удалите файл ожидания транзакций:
ren pending.xml pending.xml.old - Выполните оффлайн-откат незавершенных действий:
dism /image:D:\ /cleanup-image /revertpendingactions
Типовые ошибки администраторов
- Попытка применить DISM /ResetBase: Команда
/StartComponentCleanup /ResetBaseудаляет предыдущие версии компонентов и делает текущие обновления неудаляемыми. Если хранилище уже повреждено (0x8007371b), выполнение ResetBase может усугубить коррупцию, превратив её в неисправимую (только переустановка ОС In-Place Upgrade). Сначала почините хранилище через RestoreHealth!
Когда стандартные средства DISM бессильны, требуется микрохирургия (Surgical Repair) — ручной анализ логов CBS.log, извлечение недостающих манифестов (.manifest) и ключей реестра из 'здоровой' ОС-донора. Инженеры ITSTM обладают опытом глубокого восстановления архитектуры Windows без переустановки.
Частые вопросы (FAQ)
Почему SFC /Scannow не решает проблему 0x8007371b?
Утилита SFC (System File Checker) проверяет только 'активные' системные файлы (в System32), сверяя их с эталоном в WinSxS. Если повреждено само хранилище эталонов (WinSxS/Транзакции), SFC бессилен. Сначала нужно починить базу через DISM, а потом уже запускать SFC.
Что такое TrustedInstaller?
TrustedInstaller (Служба установщика модулей Windows / TiWorker.exe) — это супер-пользователь (и служба), обладающий эксклюзивными правами на модификацию системных файлов и хранилища WinSxS. Даже Администратор не может напрямую изменять эти файлы.
Можно ли выполнить In-Place Upgrade (Обновление поверх) для решения этой ошибки?
Да, если ОС загружается, монтирование ISO-образа той же (или более новой) версии Windows и запуск setup.exe -> 'Обновить этот ПК сейчас' (с сохранением файлов и программ) — это финальный и 100% рабочий метод 'ремонта' всего стека CBS.
Как влияет папка SoftwareDistribution на ошибку 0x8007371b?
Опосредованно. SoftwareDistribution — это просто папка для скачивания (Download) архивов. Ошибка 371b возникает на более глубоком уровне — когда архивы распакованы и переданы в движок CBS (WinSxS) для интеграции в ядро.