В данной статье описан метод ручного восстановления хранилища компонентов Windows. Подобные описанному в данном посте методу восстановления работоспособности компонентной модели рождаются вовсе не от хорошей жизни, появляются они под воздействием многочисленных проблем с компонентной моделью операционной системы. Во многих случаях официальные подходы к восстановлению хранилища компонентов не помогают, помимо этого отсутствует какая бы то ни было внятная официальная документация, из чего складывается недопонимание структуры и принципов работы компонентной модели. При подобном отношении со стороны разработчиков абсолютно любые средства вернуть компонентную модель в работоспособное состояние приемлемы!! Как показывает практика, при всех стараниях разработчиков из Microsoft предоставить возможность конечному пользователю системы устранять возникающие проблемы в автоматическом режиме (при помощи специальных утилит), никогда полностью не будут исключены ситуации, в которых эти самые автоматизированные средства будут давать сбои. Причина тут кроется в симбиозе старых механизмов операционной системы и необходимостью постоянного внедрения новых (не оттестированных) технологий, должным образом не заботясь о приведении в надлежащее состояние всех связанных (участвующих) компонентов, что, в свою очередь, порождает огромное количество проблем.
В данной публикации речь пойдет о восстановлении компонента прямой заменой файлов. Фактически методом предусматривается прямая ручная замена поврежденных [кривых, неправильно функционирующих] файлов, являющихся причиной возникновения ошибок, а так же частей реестра. По этой методике, исправные файлы и соответствующие ключи реестра копируются с работоспособной станции-донора. Слабое место метода в том, что для реализации требуется наличие находящейся на том же уровне обновлений нормально функционирующей операционной системы той же версии/ревизии.
В процессе повествования постараемся описать общую методику, тем не менее, в статье будут присутствовать частные случаи из практики.
Определение виновника проблемы
В этом разделе мы опишем принцип поиска битых файлов в составе иерархии каталогов компонентной модели, являющихся причиной возникновения сбоев. Так же попытаемся классифицировать все возможные источники информации о сбойных модулях.
Ошибки в лог-файлах
Основной и пожалуй самый информативный источник о проблемах, связанных с компонентной моделью Windows - лог-файлы системных утилит обслуживания. Чаще всего ошибки выявляются при выполнении обновления системы, то есть установки обновлений/исправлений. Проявляются они в виде разнообразных ошибочных статусов в интерфейсе Центра обновления и окон обновлений. Тем не менее, сам по себе статус не малоинформативен, а вот более детальная информация попадает в специализированные файлы журналов. В данном разделе мы опишем методики поиска источников проблем в лог-файлах результатов работы системных утилит SURT/DISM/SFC/SFCFix, которые работают с хранилищем компонентов и системными каталогами а предмет восстановления целостности компонентной модели системы.
CheckSUR.log / DISM.log
Правила поиска ошибок в файлах %Windir%\Logs\CBS\CheckSUR.log или %Windir%\Logs\DISM\DISM.log:
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 |
Статусы (первый символ):
(f)
- фатальная ошибка;(w)
- предупреждение;(fix)
- указывает на ошибку, которая была исправлена; выводятся в виде отдельной строки сразу за строкой со статусом (f);
Оставшаяся часть строки содержит имя поврежденного файла и код ошибки.
В конце файла можно видеть секцию Unavailable repair files:, которая группирует все файлы, которые нужно будет заменять.
CBS.log
Несколько вариантов поиска ошибок в лог-файле %WinDir%\Logs\CBS\CBS.log:
- Производим поиск строк, содержащих ключевое слово
Error
(с пробелом ДО или ПОСЛЕ). В их окружении можно найти указание на конкретные ошибки; - Выполняем команду
findstr /c:"[SR]" %windir%\logs\cbs\cbs.log > c:\sfcdetails.txt
в результате чего в корне диска C: будет создан файл
sfcdetails.txt
, включающий лишь строки исходного файла, содержащие префикс[SR]
(содержащие информацию об ошибках).
1: отсутствующие компоненты
1 2 3 4 5 6 7 8 9 10 |
. . . 2016-01-05 14:20:31, Info CSI 00001a68 [SR] Verifying 100 (0x0000000000000064) components 2016-01-05 14:20:31, Info CSI 00001a69 [SR] Beginning Verify and Repair transaction 2016-01-05 14:20:31, Info CSI 00001a6a [SR] Cannot repair member file [l:32{16}]"BRCI06UI.DLL.mui" of prnbr002.inf.Resources, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture = [l:10{5}]"ru-RU", VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, file is missing 2016-01-05 14:20:31, Info CSI 00001a6b [SR] Cannot repair member file [l:32{16}]"prnbr002.inf_loc" of prnbr002.inf.Resources, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture = [l:10{5}]"ru-RU", VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, file is missing 2016-01-05 14:20:31, Error CSI 00001a6c (F) STATUS_OBJECT_NAME_NOT_FOUND #28089837# from Windows::Rtl::SystemImplementation::DirectFileSystemProvider::SysCreateFile(flags = (AllowSharingViolation), handle = {provider=NULL, handle=0}, da = (SYNCHRONIZE|FILE_READ_ATTRIBUTES), oa = @0x195c7d0->OBJECT_ATTRIBUTES {s:48; rd:NULL; on:[100]"\??\C:\Windows\WinSxS\amd64_prnbr002.inf_31bf3856ad364e35_6.1.7600.16385_none_49c93aa2c4304e9e\Amd64"; a:(OBJ_CASE_INSENSITIVE)}, iosb = @0x195c7b0, as = (null), fa = 0, sa = (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE), cd = FILE_OPEN, co = (FILE_SYNCHRONOUS_IO_NONALERT|0x00004000), eab = NULL, eal = 0, disp = Invalid) 2016-01-05 14:20:31, Error CSI 00001a6d@2016/1/5:10:20:31.885 (F) d:\win7sp1_gdr\base\wcp\sil\merged\ntu\ntsystem.cpp(2057): Error STATUS_OBJECT_NAME_NOT_FOUND originated in function Windows::Rtl::SystemImplementation::DirectFileSystemProvider::SysCreateFile expression: (null) 2016-01-05 14:20:31, Error CSI 00001a6e (F) STATUS_OBJECT_NAME_NOT_FOUND #28089836# from Windows::Rtl::SystemImplementation::CDirectory::OpenExistingDirectory(...)[gle=0xd0000034] 2016-01-05 14:20:31, Error CSI 00001a6f (F) STATUS_OBJECT_NAME_NOT_FOUND #28089835# from Windows::Rtl::SystemImplementation::CDirectory_IRtlDirectoryTearoff::OpenExistingDirectory(flags = 0, da = (SYNCHRONIZE), oa = @0x195d0e0->SIL_OBJECT_ATTRIBUTES {s:40; on:"Amd64"; a:(OBJ_CASE_INSENSITIVE)}, sa = (FILE_SHARE_READ|FILE_SHARE_WRITE), oo = (FILE_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT|FILE_OPEN_FOR_BACKUP_INTENT), dir = NULL, disp = (null)) . . . |
В обрамлении видно строки, содержащие ключевые слова Cannot repair member file.. указывающие на то, что:
- содержимое файла не соответствует содержимому хранилища для файла и WRP пытается его восстановить, тем не менее..
- ..WRP не может восстановить файл описанного в строке компонента, потому что записи в реестре о нем присутствуют, а вот сам файл отсутствует в хранилище, о чем недвусмысленно намекает фрагмент строки ..file is missing.
Ниже по тексту можно найти статус STATUS_OBJECT_NAME_NOT_FOUND, указывающий на отсутствие подкаталога. В нашем случае, как видно из отчета, повреждению подверглась целая иерархия компонента, состоящая из подкаталогов и файлов, размещавшаяся в каталоге C:\Windows\WinSxS\amd64_prnbr002.inf_31bf3856ad364e35_6.1.7600.16385_none_49c93aa2c4304e9e. Заглянув в целевой каталог, я убедился, что он действительно пуст, а вот что за событие/действие удалило его содержимое, остается только гадать, хотя подобные инциденты в Windows-системах сплошь и рядом.
2: отсутствие манифеста
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
. . . 2019-05-27 14:32:54, Info CSI 000004f9 Looking for manifest in Backup Dir... 2019-05-27 14:32:54, Error CSI 000004fa (F) Unable to load manifest for component [ml:280{140},l:186{93}]"wow64_microsoft-windows-directshow-core_31bf3856ad364e35_6.1.7601.24382_none_0f268a5b523efde9"[gle=0x80004005] 2019-05-27 14:32:54, Error CSI 000004fb@2019/5/27:11:32:54.653 (F) d:\w7rtm\base\wcp\componentstore\storelayout.cpp(2712): Store corruption detected in function ComponentStore::CRawStoreLayout::FetchManifestContent expression: 0 FileHashMismatch on resource [120]"\winsxs\manifests\wow64_microsoft-windows-directshow-core_31bf3856ad364e35_6.1.7601.24382_none_0f268a5b523efde9.manifest"[gle=0x80004005] 2019-05-27 14:32:56, Error CSI 000004fc (F) STATUS_SXS_COMPONENT_STORE_CORRUPT #1525870# from CCSDirectTransaction::OperateEnding at index 6 of 185 (0x00000000000000b9) operations, disposition 0[gle=0xd015001a] 2019-05-27 14:32:56, Error CSI 000004fd (F) HRESULT_FROM_WIN32(14098) #1496294# from Windows::ServicingAPI::CCSITransaction::ICSITransaction2_AddComponents(Flags = 4, a = @0x1b50440, mp = @0x1b50c40, disp = 0)[gle=0x80073712] 2019-05-27 14:32:56, Info CBS Failed to add one or more component [HRESULT = 0x80073712 - ERROR_SXS_COMPONENT_STORE_CORRUPT] 2019-05-27 14:32:56, Error CBS Failed to complete component closure [HRESULT = 0x80073712 - ERROR_SXS_COMPONENT_STORE_CORRUPT] 2019-05-27 14:32:56, Info CSI 000004fe@2019/5/27:11:32:56.806 CSI Transaction @0x8abb930 destroyed 2019-05-27 14:32:56, Info CBS Perf: Resolve chain complete. 2019-05-27 14:32:56, Info CBS Failed to resolve execution chain. [HRESULT = 0x80073712 - ERROR_SXS_COMPONENT_STORE_CORRUPT] 2019-05-27 14:32:56, Error CBS Failed to process single phase execution. [HRESULT = 0x80073712 - ERROR_SXS_COMPONENT_STORE_CORRUPT] 2019-05-27 14:32:56, Info CBS WER: Generating failure report for package: Package_for_RollupFix~31bf3856ad364e35~amd64~~7601.24443.1.8, status: 0x80073712, failure source: Resolve, start state: Absent, target state: Installed, client id: WindowsUpdateAgent 2019-05-27 14:32:56, Info CBS Failed to query DisableWerReporting flag. Assuming not set... [HRESULT = 0x80070002 - ERROR_FILE_NOT_FOUND] . . . |
Ключевые слова, на которые в данном случае стоит обращать внимание:
- Manifest hash for component .. does not match expected value.
- Unable to load manifest for component ..
Из чего следует, что в данном случае возникла проблема с файлом wow64_microsoft-windows-directshow-core_31bf3856ad364e35_6.1.7601.24382_none_0f268a5b523efde9.manifest, который является манифестом и располагается в поддиректории %SystemRoot%\WinSxS\Manifests. При более близком изучении было выяснено, что указанный файл почему-то нулевой.
3: попытка удаления отсутствующего компонента
При попытках установки обновления безопасности мы можем столкнуться со следующей проблемой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
. . . 2019-05-28 12:20:09, Info CBS Exec: Unprojecting Package: Package_820_for_KB4019265~31bf3856ad364e35~amd64~~6.1.1.3, Update: 4019265-2871_neutral_LDR, UninstallDeployment: amd64_006f1bee347aa0a86984388c82ccb379_31bf3856ad364e35_6.1.7601.23529_none_4683d079b6ce11b3 2019-05-28 12:20:09, Info CBS Exec: Uninstalling Package: Package_846_for_KB4019265~31bf3856ad364e35~amd64~~6.1.1.3 2019-05-28 12:20:09, Info CBS Exec: Uninstalling Package: Package_846_for_KB4019265~31bf3856ad364e35~amd64~~6.1.1.3, Update: 4019265-2966_neutral_LDR 2019-05-28 12:20:09, Info CBS Exec: Unprojecting Package: Package_846_for_KB4019265~31bf3856ad364e35~amd64~~6.1.1.3, Update: 4019265-2966_neutral_LDR, UninstallDeployment: amd64_0f4370f0564ad69cbf1c9624ac455552_31bf3856ad364e35_7.6.7601.23775_none_3e0e14d4d5b6573f 2019-05-28 12:20:09, Error CBS Failed. Attempted to uninstall a version of a non-driver component that is not installed, version: 0X700061db15cdf, component: amd64_microsoft-windows-w..lient-aux.resources_31bf3856ad364e35_7.6.7601.23775_ru-ru_306f57c17eac5f89, owner: Package_846_for_KB4019265~31bf3856ad364e35~amd64~~6.1.1.3.4019265-2966_neutral_LDR [HRESULT = 0x80004005 - E_FAIL] 2019-05-28 12:20:09, Info CBS Failed to mergecomponent [HRESULT = 0x80004005 - E_FAIL] 2019-05-28 12:20:09, Info CBS ComponentAnalyzerUninstallDeployment: Failed on update: 4019265-2966_neutral_LDR [HRESULT = 0x80004005 - E_FAIL] 2019-05-28 12:20:09, Info CBS Failed to execute item[0] in Package: Package_846_for_KB4019265~31bf3856ad364e35~amd64~~6.1.1.3, Update: 4019265-2966_neutral_LDR [HRESULT = 0x80004005 - E_FAIL] 2019-05-28 12:20:09, Info CBS Failed to execute execution update. [HRESULT = 0x80004005 - E_FAIL] 2019-05-28 12:20:09, Info CBS Failed to execute execution package: Package_846_for_KB4019265~31bf3856ad364e35~amd64~~6.1.1.3 [HRESULT = 0x80004005 - E_FAIL] 2019-05-28 12:20:09, Info CBS Failed to prepare execution [HRESULT = 0x80004005 - E_FAIL] 2019-05-28 12:20:09, Info CSI 00000016@2019/5/28:09:20:09.916 CSI Transaction @0x1b71940 destroyed 2019-05-28 12:20:09, Info CBS Perf: InstallUninstallChain complete. 2019-05-28 12:20:09, Info CBS Failed to execute execution chain. [HRESULT = 0x80004005 - E_FAIL] 2019-05-28 12:20:09, Error CBS Failed to process single phase execution. [HRESULT = 0x80004005 - E_FAIL] 2019-05-28 12:20:09, Info CBS WER: Generating failure report for package: Package_for_RollupFix~31bf3856ad364e35~amd64~~7601.24443.1.8, status: 0x80004005, failure source: Execute, start state: Staged, target state: Installed, client id: WindowsUpdateAgent 2019-05-28 12:20:09, Info CBS Failed to query DisableWerReporting flag. Assuming not set... [HRESULT = 0x80070002 - ERROR_FILE_NOT_FOUND] 2019-05-28 12:20:10, Info CBS Failed to add %windir%\winsxs\pending.xml to WER report because it is missing. Continuing without it... 2019-05-28 12:20:10, Info CBS Failed to add %windir%\winsxs\pending.xml.bad to WER report because it is missing. Continuing without it... 2019-05-28 12:20:10, Info CBS Reboot mark refs: 0 . . . |
Судя по всему установщик ругается на попытку удаления отсутствующего компонента amd64_microsoft-windows-w..lient-aux.resources_31bf3856ad364e35_7.6.7601.23775_ru-ru_306f57c17eac5f89 из пакета Package_846_for_KB4019265~31bf3856ad364e35~amd64~~6.1.1.3.4019265-2966_neutral_LDR. Сам компонент оказался на месте вместе со собственным манифестом, поэтому не понятно что же не нравится стеку обслуживания. Тем не менее что-то с этим пакетом явно не так.
Окна ошибок в интерфейсе
Часто ошибки наблюдаются пользователем визуально, в виде статусов ошибок в окне Центра обновления Windows, но иногда их можно увидеть в автономных информационных окнах. Например, отказ запуска множества исполняемых системных образов может выражаться в постоянно всплывающих окнах, в заголовке которых можно видеть "<имя_образа> (в контексте которого произошел сбой) - ошибочный образ", а в информационной части текст ошибки: X:\XXXXXX\xxxxxxxx.dll либо не предназначен для выполнения под управлением Windows или содержит ошибку. Попробуйте переустановить программу с помощью исходного установочного носителя или обратитесь к системному администратору или поставщику программного обеспечения за поддержкой:
В английских версиях в заголовке можно увидеть "<filename> - bad image", а описание звучит как: "<filename> is either not designed to run on Windows or it contains an error. Try installing the program again using the original installation media or contact your system administrator or the software vendor for support." Часто сообщение в окне дополняется специфической деталью сбоя, например кодом ошибки: "Error status 0xc000012f".
В данном случае, как вы можете видеть на снимке экрана выше, у нас повреждена библиотека с именем ncrypt.dll, относительно неё мы и поведем дальнейшее повествование.
Восстановление файлов
На предыдущем шаге мы определились в виновником ошибки, то есть определили имена поврежденных/удаленных файлов:
- Если мы наблюдаем ошибку в виде информационного окна в графическом интерфейсе, то виновником обычно является модуль, имя которого фигурирует в тексте (в примере выше: ncrypt.dll). В этом случае мы будем менять все без исключения ревизии проблемного файла;
- Если мы производим разбор лог-файлов отчетов сервисных утилит (CBS/DISM/CheckSur/SFCFix), то виновник(и) проблемы обычно предстают перед нами в виде списка конкретных файлов компонентов или обновлений;
Давайте в этом разделе опишем метод восстановления компонента прямой заменой файлов подробнее, разбив весь процесс на подразделы, подробно описывающие шаги.
Поиск рабочих экземпляров файлов
На этом этапе нам необходимо найти рабочие копии поврежденных или отсутствующих файлов. Существует несколько основных подходов по нахождению рабочих копий:
- Скопировать файлы с аналогичной, полностью работоспособной системы той же версии/редакции:
- при помощи поиска (в проводнике, или любым специализированным средством типа Far/Total Commander) по системному разделу (обычно C:\) находим все каталоги, содержащие в своем названии искомую маску/имя (для случая выше: *ncrypt*). Сокращенный вывод:
1234567891011121314. . .C:\Windows\winsxs\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24417_none_6072150268f96612C:\Windows\winsxs\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18741_none_bbe0d7630856b4a1C:\Windows\winsxs\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24408_none_607de53868f06378C:\Windows\winsxs\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18812_none_bc024957083d774cC:\Windows\winsxs\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24387_none_602663a869322c82C:\Windows\winsxs\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18869_none_bbd33bc1085fb462C:\Windows\winsxs\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24384_none_602362ca6934e07dC:\Windows\winsxs\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18923_none_bbf87b9b0844a9bbC:\Windows\winsxs\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24357_none_6046d36c6919d8afC:\Windows\winsxs\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18933_none_bbedabaf084cc5acC:\Windows\winsxs\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24335_none_605a72b0690b6e1fC:\Windows\winsxs\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18939_none_bbf3ad6b08475db6. . .
Соответственно, в найденных директориях располагаются и подпадающие под маску файлы (ncrypt.dll). Как можно увидеть по именам каталогов, они предназначаются для хранения различных ревизий компонента, включающего в себя файл ncrypt.dll. Но определить точно какая именно ревизия используется тем или иным приложением сложно, поскольку используются обычно сразу несколько ревизий.Можно произвести замену файлов и в системных каталогах, таких как C:\Windows\system32\. Хотя делать это не обязательно, поскольку файлы там представляет собой жесткие ссылки на оригиналы в хранилище WinSxS, а они восстанавливаются автоматически при проверке через sfc). - в ходе того же самого поиска, кроме директорий, выявляются и файлы, которые располагаются по следующим путям (вывод сокращен):
1234567891011121314. . .C:\Windows\winsxs\Manifests\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24408_none_bc9c80bc214dd4ae.manifestC:\Windows\winsxs\Manifests\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18741_none_5fc23bdf4ff9436b.manifestC:\Windows\winsxs\Manifests\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24387_none_bc44ff2c218f9db8.manifestC:\Windows\winsxs\Manifests\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18812_none_5fe3add34fe00616.manifestC:\Windows\winsxs\Manifests\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24384_none_bc41fe4e219251b3.manifestC:\Windows\winsxs\Manifests\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18869_none_5fb4a03d5002432c.manifestC:\Windows\winsxs\Manifests\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24357_none_bc656ef0217749e5.manifestC:\Windows\winsxs\Manifests\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18923_none_5fd9e0174fe73885.manifestC:\Windows\winsxs\Manifests\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24335_none_bc790e342168df55.manifestC:\Windows\winsxs\Manifests\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18933_none_5fcf102b4fef5476.manifestC:\Windows\winsxs\Manifests\amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.24308_none_bc9c7ed6214dd787.manifestC:\Windows\winsxs\Manifests\x86_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.18939_none_5fd511e74fe9ec80.manifest. . . - Разархивировать требуемые файлы из пакета обновления.
- Для этого определяем имя обновления KBXXXXXXXX, в состав которого входят обнаруженные на предыдущем шаге файлы, из Центра загрузок Майкрософт или Центра обновления Майкрософт или попросту используя поиск.
- Распаковываем содержимое выкачанного только что пакета обновления (.msu) в произвольную (временную) директорию:
expand -F:* windows6.1-kb4019265-x64_c21fb9314da54cf6bd7972581da3159535f55aec.msu c:\temp\4019265
- после чего в целевой директории мы увидим следующее содержимое:
- .xml-файл - метаданные-описатели пакета обновления (.msu). Утилиты установки используют .xml-файл при выполнении установки в автоматическом режиме;
- .cab-файл - архив с данными (полезная нагрузка) обновления;
- *-pkgProperties.txt - файл с описанием свойств пакета (дата релиза, архитектура, тип, ссылка на KB и прочее);
- WSUSSCAN.cab - файл оффлайн-сценария проверки;
- затем выполняем еще одну команду, теперь уже над только что распакованным .cab-файлом:
expand -F:* windows6.1-kb4019265-x64.cab c:\temp\4019265\extracted
- после этого необходимые нам для замены файлы будут располагаться в директории c:\temp\4019265\extracted
Установка безопасности для каталогов/файлов
В операционных системах Windows директория компонентной модели WinSxS (и вложенные в неё объекты) защищены на уровне разрешений файловой системы. Поэтому следующим шагом нам потребуется взять владение каталогов WinSxS для собственной учетной записи (под которой выполняете восстановление), затем выставить полные разрешения для этой учетной записи, а далее применить их для всех вложенных папок/файлов.
Сделать это можно двумя способами:
- Через проводник. Нажимаем правую клавишу мыши на директории WinSxS - пункт Свойства - вкладка Безопасность - кнопка Дополнительно - вкладка Владелец - кнопка Изменить - ставим курсор на нужного нам пользователя, активируем чекбокс Заменить владельца подконтейнеров и объектов - жмем кнопку Применить. После окончания процесс закрываем все открытые окна через кнопку OK, повторно жмем правую клавишу мыши на директории WinSxS - вкладка Безопасность - во фрейме Группы и пользователи кнопка Изменить - выделяем курсором группу Администраторы - ставим разрешения Изменение и Запись;
- Через командную строку. Из командной строки (cmd) выполняем следующие команды:
takeown /f c:\windows\winsxs\*
даем группе Администраторы (в которую, я надеюсь, включена ваша учетная запись) полный доступ к целевому файлу, для этого выполняем следующую команду:
icacls c:\windows\winsxs\* /GRANT АДМИНИСТРАТОРЫ:F
Копирование каталогов/файлов
И последним шагом выполняется непосредственно копирование (с заменой) с донорской (исправной) системы на целевую (проблемную) содержимого всех обнаруженных на предыдущих шагах каталогов и файлов, не забывайте так же и .manifest-файлы.
Что именно мы копируем:
- Если присутствуют пара
.cat
или.mum
файлов компонента, то скопировать их в каталог %WinDir%\servicing\Packages (с донора на цель). Копировать именно всю пару, даже если поврежден всего-лишь один из них (и один из них отображается в лог-файле); - Если к паре
.cat
/.mum
файлов присутствует еще и.ses
-файл, то копируем и его; - Если присутствуют одноименные манифесты (
.manifest
-файл(ы)) компонента, то скопировать их в каталог %WinDir%\WinSxS\Manifests (с донора на цель); - Если присутствуют остальные подкаталоги/файлы компонента, то скопировать их в каталог компонента %WinDir%\WinSxS\имя_компонента\ (c донора на цель);
- Если присутствуют файлы в директории C:\Windows\System32, то можно скопировать и их (с донора на цель). Хотя делать это и не обязательно, поскольку жесткие ссылки восстанавливаются при проверках через sfc;
Производить операции копирования файлов (во избежание блокировок на работающей системе) можно при помощи любого загрузочного LiveCD, предварительно скопировав все переносимые файлы на флешку (или любой иной носитель). Выполнять же само копирование можно как при помощи командной строки, так и выполнить перемещение с помощью проводника Windows.
Восстановление реестра
Обычно файловых исправлений бывает достаточно для того, что бы устранить ошибки в компонентной модели Windows, соответственно, исправить ошибки, происходящие в процессе установки обновлений. Тем не менее, бывают случаи, когда повреждается еще и реестровая часть компонента, тогда требуется производить дополнительные действия по восстановлению:
- Запустить командную строку (cmd);
- Подключить динамический куст реестра HKLM\COMPONENTS командой:
reg load HKLM\COMPONENTS C:\WINDOWS\SYSTEM32\CONFIG\COMPONENTS
если выскакивает ошибка:
1процесс не может получить доступ к файлу, так как этот файл занят другим процессом.то куст уже подключен.
- Запустить редактор реестра regedit;
- В открывшемся окне нажать Ctrl+F и ввести имя компонента, который вы восстанавливали на предыдущем шаге;
- В случае отсутствия каких либо записей реестра, выполнить импортирование соответствующих записей реестра о компоненте с рабочей машины;
- Выполнить команду:
reg unload HKLM\COMPONENTS
- выполнить перезагрузку операционной системы;