Como corrigir o opencl.dll corrompido no Windows 10, se o SFC e o DISM estiverem falhando?

32
Demorei várias horas para corrigir o problema porque o armazenamento de componente local estava corrompido e os computadores estavam acessando um servidor WSUS local em vez do servidor de atualização pública pela Microsoft (e porque eu uso o Dism muito raramente). Para referência e para ajudar outras pessoas com o mesmo problema, vou escrever uma descrição do problema e fornecer uma solução.

Desde a atualização para o Windows 10 Pro Versão 1511 (Build 10586) eu tenho um problema com um arquivo opencl.dll corrompido em vários locais.

Eu tentei sfc.exe /scannow , mas não consegui corrigir o problema. As mensagens de erro são, entre outras:

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

Ok, o problema está claro agora. Infelizmente, SFC é incapaz de resolver a corrupção porque o armazenamento do componente local também foi corrompido. Infelizmente, perdi as mensagens de erro que indicam as corrupções do armazenamento de componentes.

Então, eu tentei Dism /Online /Cleanup-Image /RestoreHealth sem sucesso. Ele falha com o erro 0x800f081f , indicando outro problema com os arquivos de origem.

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]

Examinando as mensagens de erro, fica claro que o Windows está configurado para usar nosso servidor WSUS local e, portanto, o Dism não pode recuperar o arquivo válido dos repositórios. Embora eu tenha certeza de que poderia, de alguma forma, configurar o WSUS para fornecer os arquivos necessários, não sei como e preciso de uma solução rápida. (Se alguém souber configurar o WSUS de acordo, forneça informações).

Limitar o acesso ao armazenamento local adicionando o parâmetro /LimitAccess seria inútil, pois o armazenamento de componentes local também está corrompido, como mencionado anteriormente.

Eu experimentei esse problema em duas máquinas. Uma atualização do Windows 10 não corrigiu o problema.

    
por Daniel 08.12.2015 / 09:44

9 respostas

41

Para corrigir esse problema, você precisa ter o ISO da compilação exata que você instalou.

  1. Monte a imagem ISO.
  2. Crie um diretório temporário para montar o arquivo de imagem do Windows (WIM).
    mkdir C:\WIM
  3. Monte o arquivo WIM.
    Dism /Mount-Wim /WimFile:D:\sources\install.wim /index:1 /MountDir:C:\WIM /ReadOnly
  4. Execute o Dism com os seguintes parâmetros.
    Dism /Online /Cleanup-Image /RestoreHealth /Source:C:\WIM\Windows /LimitAccess
  5. Quando terminar, desmonte a imagem e exclua a pasta | Dism /Unmount-Wim /MountDir:C:\WIM /Discard rmdir C:\WIM
  6. É obrigatório reiniciar o computador ou o SFC e o DISM ainda mostrarão erros.

Isso deve resolver o problema.

Editar
Como apontado nos comentários, pode haver uma abordagem mais direta. O TL; DR é, que não funcionou para mim, daí a minha abordagem mais detalhada. Mas estou interessado se você teve algum problema com a abordagem direta. Por favor, comente.

    
por 08.12.2015 / 09:58
10

De vários fóruns na Internet, montei o seguinte procedimento de reparo:

  1. Faça o download da MediaCreationTool de link
  2. Download do Windows 10 Pro ISO com MediaCreationTool.exe para c:\temp\windows.iso
  3. Use o 7-zip para extrair o arquivo c:\temp\windows.iso para a pasta c:\temp\windows
  4. Converter install.esd para install.wim

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

  5. Verifique a versão do índice e do Windows em .wim file
    - index é usado para o próximo comando Dism no parâmetro /Source:wim:path_to_wim:[index]

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

  6. Restaurar componentes de janelas de integridade da imagem baixada e convertida do Windows (wim):

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

  7. Reparar arquivos corrompidos:

    sfc /scannow

    Ele consertará arquivos corrompidos - mensagem de sucesso: Windows Resource Protection found corrupt files and successfully repaired them.

  8. Reinicie o Windows
  9. Verifique novamente os arquivos do sistema para ter certeza de um reparo bem-sucedido:

    sfc /scannow

    Mensagem de sucesso após a verificação: Windows Resource Protection did not find any integrity violations.

por 16.05.2016 / 19:46
4

Um ESD não é um WIM "criptografado", é um WIM que foi altamente compactado / reencodificado de forma muito diferente (com uma estrutura mais complexa).

Um WIM é apenas "rápido" comprimido por unidades inquebráveis de 4KB ou 16KB, usando uma rápida compressão Huffmann. Um ESD usa compactação baseada em LZ mais avançada sem limitações de tamanho de bloco. Essa compactação não permite que a imagem seja aberta no modo leitura-gravação, pois a compactação é global (cada arquivo no archive não é mais compactado separadamente, vários arquivos lógicos podem compartilhar o armazenamento real de segmentos, para atingir uma compactação maior) nível, principalmente quando há muitos arquivos pequenos com partes de cabeçalhos comuns, como coleções de ícones ou partes de seus dados de assinatura digital, avisos de direitos autorais, cabeçalhos de HTML, scripts incorporados e assim por diante).

Um SWM é um WIM multiparte que foi dividido em vários arquivos com tamanhos menores com um tamanho máximo (aproximado), mas ainda é gravável e pode ser armazenado em vários DVDs.

Os provedores CBS permitem vários formatos de arquivamento que podem ser suportados pelo DISM, incluindo WIM, CAB, ZIP, VHDX, VHDX, ISOs multisessão ... Mas o Windows vem com dois provedores internos para os formatos WIM e ESD (ESD é novo em Windows 10, com o Windows 8, apenas o formato WIM era suportado, mas as imagens eram maiores)

O formato ESD foi ajustado para permitir que a distribuição completa em vários idiomas do Windows 10 coubesse em um único DVD com menos de 3 GB ...

Você pode transformar um ESD em WIM, mas o resultado será um arquivo muito maior. A conversão inversa também é possível (para que você possa ler e gravar no WIM expandido) para compactá-lo novamente em um novo ESD. Descompactar um ESD para WIM é relativamente rápido, mas compactar um WIM para ESD requer muitos recursos de CPU e é muito mais (é por isso que você não pode ler-gravar diretamente em um ESD, mas pode fazê-lo facilmente em um WIM com modesto Uso da CPU).

Quando você "monta" um ESD com o DISM, a primeira coisa que ele fará é expandir o ESD para um armazenamento temporário e agir como se fosse um WIM, para que você possa atualizar os arquivos nesse armazenamento local. A desmontagem exigirá dois passos: recriar um WIM (muito rápido) e depois empacotá-lo novamente em um ESD (muito lento).

    
por 04.06.2016 / 10:43
2

Eu resolvi o problema com opengl.dll da seguinte forma:

  1. Monte a imagem do Windows 10.

  2. Dism / On-line / Cleanup-Image / RestoreHealth /Source:esd:F:\sources\install.esd\1\Windows\WinSxS\wow64_microsoft-windows-r..xwddmdriver-wow64-c_31bf3856ad364e35_10.0.10586. 0_none_3dae054b56911c22 \

  3. sfc / scannow

Boa sorte!

    
por 21.12.2015 / 22:46
2

Passei alguns dias percorrendo esses caminhos e finalmente encontrei uma solução para minha situação. Estou executando o Windows 10 versão 1511 Build 10586.545. Aqui está minha progressão:

  1. Isso começou para mim com uma falha no Windows Update (erro 0x800705b4).
  2. Eu então perseguei esse erro fazendo as solucionadoras de problemas do Windows Update, WUResets, desabilitando antivírus, etc. Este Link é um bom artigo que dá opções para esse problema (embora eles não tenham me ajudado)
  3. Em seguida, desci o caminho do DISM e do SFC. Esta postagem do ServerFault foi muito útil nessa tentativa. Infelizmente nenhuma dessas opções ajudou. Eu continuei me dizendo que eu tenho um arquivo opencl.dll corrompido, e executando todos os tipos de variações do DISM / RestoreHealth não funcionou. Eu continuei recebendo 0x800f081f (arquivos de origem não foram encontrados)
  4. Em seguida, tentei copiar manualmente o opencl.dll de um ISO limpo para C: \ Windows \ SysWOW64. Isso nunca funcionou, mesmo depois de confundir a propriedade, etc. Eu finalmente desativei o driver NVIDIA GeForce GPU no Gerenciador de dispositivos (deixando um driver Intel ainda permitindo exibição), e foi capaz de copiar o opencl.dll limpo em C: \ Windows \ SysWOW64.

A partir daqui, o Windows Update começou a funcionar novamente.

Então, em resumo, se você está lutando com esses erros e nada parece funcionar, tente desabilitar os drivers NVIDIA GeForce e tentar algumas dessas etapas (ou copiar manualmente em uma versão limpa da DLL).

    
por 26.08.2016 / 16:46
1

Devido a não ter uma cópia local e por um motivo separado, não é possível baixar o arquivo ISO (o ISO não era do tipo Windows 10 que eu instalei). Há um solução de hotfix aqui que eu usei o que envolve o download de um arquivo especialista chamado" SFCFix ":

SFCFix is a brilliant little utility that is capable of fixing this problem for you by repairing/replacing the corrupt dll file.

Once the executable file for SFCFix has been downloaded, move it to your Desktop.

A ZIP file containing everything SFCFix needs in order to repair/replace your corrupt opencl.dll file. You will be asked by the website to register on it to gain access to the ZIP file, you should do so as it is completely free.

Once sfcfix.zip has been downloaded, move it to your Desktop. Close all open programs. Drag the ZIP file onto the executable file for the SFCFix program and then release it.

SFCFix will launch and start applying the fix for the corrupt dll file. Let it work its magic.

Once SFCFix is done, it will create a file named SFCFix.txt on your Desktop. Open this file and, if SFCFix was successful at repairing/replacing your corrupt opencl.dll file,

Por favor, note que rodar o arquivo SFCFix.exe sem o hotfix ZIP será um processo longo e lento que consegue muito pouco, você precisa executá-lo com o método de arrastar / soltar o arquivo ZIP, e O resultado é quase instantâneo.

    
por 14.06.2016 / 10:26
0

Você deve ser capaz de utilizar uma imagem esd, de acordo com o artigo sobre technet do DISM. Uma imagem ESD (Electronic Software Delivery) é simplesmente uma versão criptografada de um WIM e também utiliza um algoritmo de compactação muito melhor que o formato WIM (geralmente em torno de 1.5x melhor compactação).

Se tudo que tiver é um ESD, mas preferir usar um WIM, você pode converter um ESD para WIM com o comando de exportação do DISM. Você também pode converter um WIM em ESD especificando / compress: recovery no comando de exportação ou captura. A conversão de um para o outro consome muitos recursos e, por isso, é recomendável utilizar o script ESD to WIM que foi escrito anos atrás e está disponível no fórum do MSFN. Utilizando o script, apenas ~ 50% dos recursos do sistema são dedicados à exportação versus os 90% + que são geralmente utilizados para a exportação.

    
por 15.03.2016 / 23:29
0

Acabei de ir para outra máquina x64 do Windows 10 Pro e copiei o arquivo opencl.dll (do mesmo diretório). Então eu tomei posse do mau opencl.dll, renomei-o para opencl.old e copiei no novo. Reinicie novamente no modo de segurança e execute o sfc / scannow e ele voltará bem. No meu caso, este foi o único arquivo ruim listado no cbs.log ... Eu posso ver onde seria melhor ter o sfc funcionando se você tiver muitos arquivos corrompidos e não quiser corrigir cada um individualmente. Mas se o seu problema é apenas a dll, então uma simples cópia parece funcionar.

    
por 22.08.2016 / 18:44
0

Parece que a imagem de instalação ( install.esd ) da mídia de instalação da Atualização do Criador é incompatível com o método DISM descrito aqui. Você receberá o erro 0x800f081f , independentemente do tipo de comando digitado. Também não ajuda a extrair o install.wim correto do arquivo ESD. Finalmente, eu até tentei montar o arquivo WIM sem sucesso também.

Veja também as discussões no link

Atualização: O erro persistente não tem nada a ver com o comando dism ou com os arquivos wim. É devido a um pacote chamado Microsoft-Windows-TestRoot-and-FlightSigning-Package para o qual não há fontes de trabalho disponíveis. Os arquivos estão em C: \ Windows \ Servicing \ Packages e precisam ser movidos de lá. Além disso, há duas referências no registro que precisam ser excluídas. Consulte o encadeamento sysnativo vinculado para obter detalhes.

    
por 20.04.2017 / 19:28