Назад | Перейти на главную страницу

Как исправить поврежденный opencl.dll в Windows 10, если SFC и DISM не работают?

На устранение проблемы у меня ушло несколько часов, потому что локальное хранилище компонентов было повреждено, и компьютеры обращаются к локальному серверу WSUS, а не к общедоступному серверу обновлений Microsoft (и потому, что я очень редко использую Dism). Для справки и помощи другим людям с той же проблемой я запишу описание проблемы и предложу решение.

После обновления до Windows 10 Pro версии 1511 (сборка 10586) у меня возникла проблема с поврежденным файлом. opencl.dll в нескольких местах.

Я попытался sfc.exe /scannow, но решить проблему не удалось. Среди прочих сообщений об ошибках:

2015-12-08 08:50:43, Info                  CSI    00003c3a Hashes for file member \SystemRoot\WinSxS\wow64_microsoft-windows-r..xwddmdriver-wow64-c_31bf3856ad364e35_10.0.10586.0_none_3dae054b56911c22\opencl.dll do not match actual file [l:10]"opencl.dll" :
  Found: {l:32 g2VAunZ6/2J1G3oL7kf9fjInPUA9VYeiJcl9VKgizaY=} Expected: {l:32 9rnAnuwzPjMQA7sW63oNAVhckspIngsqJXKYSUeQ5Do=}
2015-12-08 08:50:43, Info                  CSI    00003c3b [SR] Cannot repair member file [l:10]"opencl.dll" of microsoft-windows-RemoteFX-clientVM-RemoteFXWDDMDriver-WOW64-C, version 10.0.10586.0, arch Host= amd64 Guest= x86, nonSxS, pkt {l:8 b:31bf3856ad364e35} in the store, hash mismatch
2015-12-08 08:50:43, Info                  CSI    00003c3c [SR] This component was referenced by [l:125]"Microsoft-Windows-RemoteFX-VM-Setup-Package~31bf3856ad364e35~amd64~~10.0.10586.0.RemoteFX clientVM and UMTS files and regkeys"
2015-12-08 08:50:43, Info                  CSI    00003c3d Hashes for file member \??\C:\WINDOWS\SysWOW64\opencl.dll do not match actual file [l:10]"opencl.dll" :
  Found: {l:32 g2VAunZ6/2J1G3oL7kf9fjInPUA9VYeiJcl9VKgizaY=} Expected: {l:32 9rnAnuwzPjMQA7sW63oNAVhckspIngsqJXKYSUeQ5Do=}
2015-12-08 08:50:43, Info                  CSI    00003c3e Hashes for file member \SystemRoot\WinSxS\wow64_microsoft-windows-r..xwddmdriver-wow64-c_31bf3856ad364e35_10.0.10586.0_none_3dae054b56911c22\opencl.dll do not match actual file [l:10]"opencl.dll" :
  Found: {l:32 g2VAunZ6/2J1G3oL7kf9fjInPUA9VYeiJcl9VKgizaY=} Expected: {l:32 9rnAnuwzPjMQA7sW63oNAVhckspIngsqJXKYSUeQ5Do=}
2015-12-08 08:50:43, Info                  CSI    00003c3f [SR] Could not reproject corrupted file [l:23 ml:24]"\??\C:\WINDOWS\SysWOW64"\[l:10]"opencl.dll"; source file in store is also corrupted

Хорошо, теперь проблема ясна. К сожалению, SFC не может устранить повреждение, потому что локальное хранилище компонентов также было повреждено. К сожалению, я потерял сообщения об ошибках, указывающие на повреждение хранилища компонентов.

Так что я попробовал Dism /Online /Cleanup-Image /RestoreHealth но безрезультатно. Не работает с ошибкой 0x800f081f, что указывает на другую проблему с исходными файлами.

2015-12-08 08:57:35, Info                  CBS    Exec: Download qualification evaluation, business scenario: Manual Corruption Repair
2015-12-08 08:57:35, Info                  CBS    Exec: Clients specified using Windows Update.
2015-12-08 08:57:35, Info                  CBS    WU: Update service is not default AU service, skip. URL: https://fe2.update.microsoft.com/v6/, Name: Microsoft Update
2015-12-08 08:57:35, Info                  CBS    WU: Update service is not default AU service, skip. URL: https://fe2.ws.microsoft.com/v6/, Name: Windows Store
2015-12-08 08:57:35, Info                  CBS    WU: Update service is not default AU service, skip. URL: https://fe3.delivery.mp.microsoft.com/, Name: Windows Store (DCat Prod)
2015-12-08 08:57:35, Info                  CBS    WU: WSUS service is the default, URL: (null), Name: Windows Server Update Service
2015-12-08 08:57:35, Info                  CBS    DWLD:Search is done, set download progress to 20 percent.
2015-12-08 08:57:35, Info                  CBS    Nothing to download, unexpected
2015-12-08 08:57:35, Info                  CBS    Failed to collect payload and there is nothing to repair. [HRESULT = 0x800f081f - CBS_E_SOURCE_MISSING]
2015-12-08 08:57:35, Info                  CBS    Failed to repair store. [HRESULT = 0x800f081f - CBS_E_SOURCE_MISSING]

Глядя на сообщения об ошибках, становится ясно, что Windows настроена на использование нашего локального сервера WSUS, и поэтому Dism не может получить действительный файл из репозиториев. Хотя я уверен, что смогу каким-то образом настроить WSUS для предоставления необходимых файлов, я не знаю, как это сделать, и мне нужно быстрое решение. (Если кто-то знает, как настроить WSUS соответствующим образом, предоставьте информацию).

Ограничение доступа к локальному хранилищу путем добавления параметра /LimitAccess будет бесполезно, поскольку локальное хранилище компонентов также повреждено, как упоминалось ранее.

Я столкнулся с этой проблемой на двух машинах. А обновить Windows 10 не устранила проблему.

Чтобы решить эту проблему, вам необходимо иметь ISO-образ той сборки, которую вы установили.

  1. Смонтируйте образ ISO.
  2. Создайте временный каталог для монтирования файла образа Windows (WIM).
    mkdir C:\WIM
  3. Смонтируйте файл WIM.
    Dism /Mount-Wim /WimFile:D:\sources\install.wim /index:1 /MountDir:C:\WIM /ReadOnly
  4. Запустите Dism со следующими параметрами.
    Dism /Online /Cleanup-Image /RestoreHealth /Source:C:\WIM\Windows /LimitAccess
  5. Когда закончите, размонтируйте образ и удалите папку
    Dism /Unmount-Wim /MountDir:C:\WIM /Discard rmdir C:\WIM
  6. Обязательно перезагрузите компьютер, иначе SFC и DISM все равно будут показывать ошибки.

Это должно решить проблему.

редактировать
Как указано в комментариях, может быть более прямой подход. TL; DR заключается в том, что это не сработало для меня, поэтому мой более подробный подход. Но мне интересно, были ли у вас проблемы с прямым заходом. Пожалуйста, прокомментируйте.

С разных форумов в Интернете собрал следующую процедуру ремонта:

  1. Загрузите MediaCreationTool из http://go.microsoft.com/fwlink/?LinkId=691209
  2. Загрузите Windows 10 Pro ISO с MediaCreationTool.exe к c:\temp\windows.iso
  3. Используйте 7-zip для извлечения файла c:\temp\windows.iso в папку c:\temp\windows
  4. Перерабатывать install.esd к install.wim

    Dism /Export-Image /SourceImageFile:c:\temp\windows\sources\install.esd /SourceIndex:1 /DestinationImageFile:c:\temp\windows\sources\install.wim /compress:max

  5. Проверить индекс и версию Windows в .wim файл
    -index используется для следующей команды Dism в параметре /Source:wim:path_to_wim:[index]

    Dism /Get-WimInfo /wimFile:c:\temp\windows\sources\install.wim

  6. Восстановление компонентов Windows работоспособности из загруженного и преобразованного образа Windows (wim):

    Dism /Online /Cleanup-Image /RestoreHealth /Source:wim:c:\temp\windows\sources\install.wim:1 /LimitAccess

  7. Восстановить поврежденные файлы:

    sfc /scannow

    Он восстановит поврежденные файлы - сообщение об успешном завершении: Windows Resource Protection found corrupt files and successfully repaired them.

  8. Перезагрузите Windows
  9. Проверьте системные файлы еще раз, чтобы убедиться, что восстановление выполнено успешно:

    sfc /scannow

    Сообщение об успешном завершении сканирования: Windows Resource Protection did not find any integrity violations.

ESD не является «зашифрованным» WIM, это WIM, который сильно упакован / перекодирован по-разному (с более сложной структурой).

WIM просто «быстро» сжимается небьющимися блоками размером 4 КБ или 16 КБ с использованием быстрого сжатия Хаффмана. ESD использует более продвинутое сжатие на основе LZ без ограничений размера блока. Такое сжатие не позволяет открывать изображение в режиме чтения-записи, поскольку сжатие является глобальным (каждый файл в архиве больше не сжимается отдельно, несколько логических файлов могут совместно использовать фактическое хранилище сегментов, чтобы достичь гораздо более высокого сжатия. уровень, особенно когда есть много небольших файлов с общими частями заголовков, такими как коллекции значков или части данных их цифровой подписи, уведомления об авторских правах, заголовки HTML, встроенные сценарии и т. д.).

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

Поставщики CBS допускают несколько форматов архивирования, которые могут поддерживаться DISM, включая WIM, CAB, ZIP, VHD, VHDX, мультисессионные ISO ... Но Windows поставляется с двумя встроенными поставщиками для форматов WIM и ESD (ESD является новым для Windows 10, с Windows 8 поддерживался только формат WIM, но изображения были больше)

Формат ESD был настроен таким образом, чтобы обеспечить возможность размещения полного многоязычного дистрибутива Windows 10 на одном DVD с объемом менее 3 ГБ ...

Вы можете преобразовать ESD в WIM, но в результате получится файл гораздо большего размера. Также возможно обратное преобразование (чтобы вы могли читать-писать в расширенном WIM), чтобы снова упаковать его в новый ESD. Распаковка ESD в WIM относительно быстрая, но сжатие WIM в ESD требует много ресурсов ЦП и занимает гораздо больше времени (вот почему вы не можете читать-писать непосредственно в ESD, но вы можете сделать это довольно легко в WIM со скромными Использование процессора).

Когда вы «монтируете» ESD с помощью DISM, первое, что он делает, это расширяет ESD во временное хранилище и действует с ним, как если бы это был WIM, чтобы вы могли обновлять файлы в этом локальном хранилище. Для его размонтирования потребуется два шага: воссоздать WIM (довольно быстро), а затем снова упаковать его в ESD (очень медленно).

Решил проблему с opengl.dll следующим образом:

  1. Смонтируйте образ Windows 10.

  2. Dism / Online / Cleanup-Image / RestoreHealth / Источник: esd: F: \ sources \ install.esd \ 1 \ Windows \ WinSxS \ wow64_microsoft-windows-r..xwddmdriver-wow64-c_31bf3856ad364e35_10.0.10586.0_none_3daec22b569

  3. sfc / scannow

Удачи!

Я провел несколько дней, идя по этим путям, и наконец нашел решение своей ситуации. Я использую Windows 10 версии 1511, сборка 10586.545. Вот мой прогресс:

  1. Это началось для меня с ошибкой Центра обновления Windows (ошибка 0x800705b4).
  2. Затем я преследовал эту ошибку, выполняя средства устранения неполадок Центра обновления Windows, WUResets, отключая антивирус и т. Д. Эта ссылка хорошая статья, дающая варианты решения этой проблемы (хотя они мне не помогли)
  3. Затем я пошел по пути DISM и SFC. Этот пост ServerFault был очень полезен в этой попытке. К сожалению, ни один из этих вариантов не помог. Мне все время говорили, что у меня поврежден файл opencl.dll, и запуск всевозможных вариантов DISM / RestoreHealth не работал. Я все время получал 0x800f081f (исходные файлы не найдены)
  4. Затем я попытался вручную скопировать opencl.dll из чистого ISO в C: \ Windows \ SysWOW64. Это никогда не сработало, даже после того, как я стал владельцем и т. Д. Я наконец отключил драйвер NVIDIA GeForce GPU в диспетчере устройств (оставив драйвер Intel, который все еще поддерживает отображение), и смог скопировать чистый opencl.dll в C: \ Windows \ SysWOW64.

Отсюда Центр обновления Windows снова начал работать.

Таким образом, если вы боретесь с этими ошибками и ничего не работает, попробуйте отключить драйверы NVIDIA GeForce, а затем попробуйте некоторые из этих шагов (или вручную скопируйте в чистую версию DLL).

Из-за того, что у меня нет локальной копии и по другой причине невозможно загрузить файл ISO (ISO не относится к типу Windows 10, который я установил). исправление здесь который я использовал для загрузки специального файла под названием "SFCFix":

SFCFix - замечательная маленькая утилита, способная решить эту проблему за вас, восстановив / заменив поврежденный файл dll.

После загрузки исполняемого файла для SFCFix переместите его на рабочий стол.

А ZIP-файл, содержащий все, что нужно SFCFix для ремонта / замены поврежденного файла opencl.dll. Веб-сайт попросит вас зарегистрироваться на нем, чтобы получить доступ к ZIP-файлу, вы должны сделать это, так как это совершенно бесплатно.

После загрузки sfcfix.zip переместите его на рабочий стол. Закройте все открытые программы. Перетащите ZIP-файл в исполняемый файл программы SFCFix и отпустите его.

SFCFix запустится и начнет применять исправление для поврежденного файла DLL. Позвольте ему творить чудеса.

Как только SFCFix будет готов, он создаст файл с именем SFCFix.txt на вашем рабочем столе. Откройте этот файл и, если SFCFix удалось восстановить / заменить поврежденный файл opencl.dll,

Обратите внимание, что запуск файла SFCFix.exe без ZIP-архив с исправлением будет долгим и медленным процессом, который мало что дает, вам нужно запустить его с помощью метода перетаскивания ZIP-файла, и результат будет почти мгновенным.

Вы должны иметь возможность использовать образ esd, согласно статье DISM technet. Образ ESD (электронная доставка программного обеспечения) - это просто зашифрованная версия WIM, в котором также используется гораздо лучший алгоритм сжатия, чем в формате WIM (обычно сжатие примерно в 1,5 раза лучше).

Если у вас есть только ESD, но вы предпочитаете использовать WIM, вы можете преобразовать ESD в WIM с помощью команды экспорта DISM. Вы также можете преобразовать WIM в ESD, указав / compress: recovery в команде экспорта или захвата. Преобразование одного в другой требует значительных ресурсов, и поэтому рекомендуется использовать сценарий ESD to WIM, который был написан много лет назад и доступен на форуме MSFN. При использовании сценария только ~ 50% системных ресурсов выделяется на экспорт по сравнению с 90% +, которые обычно используются для экспорта.

Я просто зашел на другую машину с Windows 10 Pro x64 и скопировал файл opencl.dll (из того же каталога). Затем я стал владельцем плохого opencl.dll, переименовал его в opencl.old и скопировал в новый. Перезагрузитесь в безопасный режим и запустите sfc / scannow, и все вернется в норму. В моем случае это был ЕДИНСТВЕННЫЙ плохой файл, указанный в cbs.log ... Я вижу, где может быть лучше, чтобы sfc работал, если у вас много поврежденных файлов и вы не хотите исправлять каждый отдельно. Но если ваша проблема только в одной dll, то кажется, работает простая копия.

Вроде установочный образ (install.esd) с установочного носителя Creator's Update несовместимо с методом DISM, описанным здесь. Вы получите ошибку 0x800f081f независимо от того, какую команду вы набираете. Также не помогает извлечь правильный install.wim из файла ESD. Наконец, я даже попытался смонтировать WIM-файл, но безрезультатно.

Смотрите также обсуждения на https://www.sysnative.com/forums/windows-10-a/22564-dism-error-0x800f081f.html#post179723

Обновление: постоянная ошибка не имеет ничего общего с командой DISM или WIM-файлами. Это связано с пакетом Microsoft-Windows-TestRoot-and-FlightSigning-Package, для которого нет рабочих источников. Файлы находятся в C: \ Windows \ Servicing \ Packages и должны быть перемещены оттуда. Кроме того, в реестре есть две ссылки, которые необходимо удалить. Подробнее см. Связанный системный поток.