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

33

Мне потребовалось несколько часов, чтобы решить эту проблему, потому что локальное хранилище компонентов было повреждено, и компьютеры обращаются к локальному серверу 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 не решить проблему.

Даниил
источник
Здесь есть длинная ветка ответов.microsoft.com/en-us/windows/forum/… о проблемах с этой DLL.
Рори

Ответы:

42

Чтобы решить эту проблему, вам нужно иметь 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 в том, что у меня это не сработало, поэтому мой более детальный подход. Но мне интересно, были ли у вас проблемы с прямым подходом. Пожалуйста, прокомментируйте.

Даниил
источник
2
Вы можете указывать на WIM без необходимости монтировать WIM: superuser.com/a/870956/174557
magicandre1981
3
@ magicandre1981 спасибо за ваш комментарий. Я читал об этом, и я пытался безрезультатно. Это всегда терпело неудачу с ошибкой, которая была 0x800f081f, я помню правильно. Было удивительно видеть, что я не смог найти ничего относительно /source:wimпараметра в официальной документации для параметров командной строки Dism .
Даниэль
Я прочитал это здесь, в содержании, чтобы включить функции: blogs.technet.com/b/joscon/archive/2013/03/29/…
magicandre1981
2
это также помогло другим пользователям: borncity.com/blog/2015/12/09/… странно, что монтирование работает, но прямой передачи WIM нет.
magicandre1981
4
После загрузки образа Windows 10 с помощью Media Creation Tool, здесь: microsoft.com/en-ca/software-download/windows10 в результирующем img был файл install.esd, который нужно было преобразовать в WIM, чтобы смонтировать Dism. Я использовал NTLite, чтобы сделать это. После этого инструкции Даниэля сработали нормально. Просто отметьте, что параметр / index на третьем шаге, вероятно, должен отражать версию Windows, Pro или Home, которую вы восстанавливаете (другими словами, используйте / index: 1 для Pro и / index: 2 для Home)
Eli Б.
10

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

  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файла
    -используется для следующей команды 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.

kapitanrum
источник
1
Спасибо, это наконец исправило мою установку Windows 10, которую я только что сделал чистую установку не так давно. Кажется, что он облажался, и sfc перестает работать сразу после чистой установки! В любом случае увидим, как долго это будет исправлено в этот раз! Полагаю, что Microsoft все еще не исправила это в последнем обновлении win 10, так как кажется, что это известная проблема для сборки 1511 news.softpedia.com/news/…s ps не должен был делать шаг 4, так как install.wim уже был там, когда я распаковал окна ISO.
daveangel
Спасибо за ответ. Проверка системных файлов будет повреждена после установки графических драйверов. Но теперь достаточно восстановить систему только при запуске SFC / SCANNOW - похоже, сейчас доступна правильная версия opencl.dll в папке winsxs. PS: Это правда, шаг 4 может быть пропущен, если вы загружаете загрузочный ISO, но инструмент создания носителей загружает только файл ESD (версия, предназначенная для обновления Windows 10). Media Creation Tool - лучший выбор для автоматической загрузки правильных установочных носителей :-)
kapitanrum
Шаг 4 (извлечение файла WIM) сделал это для меня. Отличный гид. Спасибо.
Рави Валлау
1
шаг 6 завершается с ошибкой «исходные файлы не могут быть найдены», ошибка 0x800f091f
simpleuser
Я погуглил ошибку 0x800f091f и проблема может быть с установкой .NET Framework 3.5. Если у вас только версия 4+, попробуйте установить версию 3.5. Попробуйте руководство по установке MS: msdn.microsoft.com/en-us/library/hh506443(v=vs.110).aspx
kapitanrum
4

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 (очень медленно).

verdy_p
источник
2

Я решил проблему с 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_3dae054 \ 56911

  3. SFC / SCANNOW

Удачи!

Виталий Стельмаков
источник
6
ESD ISO не восстанавливается Windows Image. Вы должны использовать ТОЛЬКО WIM ISO, которую вы можете загрузить с microsoft.com/en-us/software-download/techbench
23 Вт
2

Я провел несколько дней, идя по этим путям, и, наконец, нашел решение для моей ситуации. Я использую Windows 10 версии 1511 Build 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 в диспетчере устройств (оставив драйвер Intel по-прежнему включающим отображение), и смог скопировать чистый opencl.dll в C: \ Windows \ SysWOW64.

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

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

латунный
источник
1

Из-за отсутствия локальной копии и по отдельной причине невозможно загрузить файл 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-файла, и результат будет практически мгновенным.

Мартин
источник
0

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

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

JW0914
источник
0

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

Крис
источник
0

Кажется, что образ установки ( install.esd) с установочного носителя Обновления Создателя несовместим с методом 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 и должны быть удалены оттуда. Кроме того, в реестре есть две ссылки, которые необходимо удалить. Смотрите связанную ветку sysnative для деталей.

Герд Ротиг
источник