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

33

Levei várias horas para corrigir o problema porque o armazenamento de componentes locais estava corrompido e os computadores estão acessando um servidor WSUS local em vez do servidor de atualização público da 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 (compilação 10586), tenho um problema com um opencl.dll arquivado corrompido em vários locais.

Eu tentei sfc.exe /scannow, mas ele não conseguiu resolver 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, então o problema está claro agora. Infelizmente, o SFC não pode resolver a corrupção porque o armazenamento de componentes local também foi corrompido. Infelizmente, perdi as mensagens de erro indicando a corrupção do armazenamento de componentes.

Então eu tentei Dism /Online /Cleanup-Image /RestoreHealthsem 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]

Observando as mensagens de erro, fica claro que o Windows está configurado para usar o servidor WSUS local e, portanto, o Dism não pode recuperar o arquivo válido dos repositórios. Embora tenha certeza de que, de alguma forma, eu possa 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 como configurar o WSUS adequadamente, forneça informações).

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

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

Daniel
fonte
fwiw há um tópico longo aqui answers.microsoft.com/en-us/windows/forum/… sobre problemas com esta dll.
Rory

Respostas:

42

Para corrigir esse problema, você precisa ter o ISO da versão exata que 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
Conforme indicado nos comentários, pode haver uma abordagem mais direta. O TL; DR é que ele não funcionou para mim, portanto, minha abordagem mais detalhada. Mas estou interessado se você teve algum problema com a abordagem direta. Por favor comente.

Daniel
fonte
2
você pode apontar para o WIM sem a necessidade de montar o WIM: superuser.com/a/870956/174557
magicandre1981
3
@ magicandre1981 obrigado pelo seu comentário. Eu li sobre isso e tentei sem sucesso. Sempre falhava com um erro, que era 0x800f081f, lembro bem. Foi surpreendente ver que não consegui encontrar nada sobre o /source:wimparâmetro na documentação oficial das Opções de Linha de Comando do Dism .
Daniel
Eu li aqui no conteúdo para habilitar recursos: blogs.technet.com/b/joscon/archive/2013/03/29/...
magicandre1981
2
isso também ajudou para outros usuários: borncity.com/blog/2015/12/09/… estranho que a montagem funcione, mas passando diretamente o WIM não.
magicandre1981
4
Depois de baixar a imagem do Windows 10 usando a Media Creation Tool, aqui: microsoft.com/en-ca/software-download/windows10, o img resultante possuía um install.esd que precisava ser convertido em um WIM para ser montado por Dism. Eu usei o NTLite para fazer isso. Depois disso, as instruções de Daniel funcionaram bem. Observe que o parâmetro / index na terceira etapa provavelmente deve refletir a versão do Windows, Pro ou Home, que você está restaurando (em outras palavras, use / index: 1 para Pro e / index: 2 para Home)
Eli B.
10

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

  1. Faça o download do MediaCreationTool em http://go.microsoft.com/fwlink/?LinkId=691209
  2. Baixe o Windows 10 Pro ISO com MediaCreationTool.exeac:\temp\windows.iso
  3. Use 7-zip para extrair arquivo c:\temp\windows.isopara pastac:\temp\windows
  4. Converter install.esdeminstall.wim

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

  5. O índice de verificação e a versão do Windows no .wimarquivo
    -index são usados ​​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. Restaure os componentes do Windows Health da imagem do Windows baixada e convertida (wim):

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

  7. Reparar arquivos corrompidos:

    sfc /scannow

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

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

    sfc /scannow

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

kapitanrum
fonte
1
Graças a isso finalmente corrigi minha instalação do Windows 10, que eu fiz uma instalação limpa há pouco tempo. Parece ser ferrado e o sfc falha logo depois de fazer uma instalação limpa! De qualquer forma, verá quanto tempo fica fixo dessa vez! Acho que a Microsoft ainda não o corrigiu na atualização mais recente do win 10, pois parece ser um problema conhecido para 1511 build news.softpedia.com/news/… ps não precisou executar a etapa 4, já que o install.wim já estava lá quando eu extraiu o ISO do Windows.
Daveangel
Obrigado pela resposta. O verificador de arquivos do sistema será corrompido após a instalação de dirvers gráficos. Mas agora é suficiente para reparar o sistema apenas com o SFC / SCANNOW - Parece que agora está disponível a versão correta do opencl.dll na pasta winsxs. PS: É verdade, a etapa 4 pode ser omitida, se você baixar o ISO inicializável, mas a ferramenta de criação de mídia baixa apenas o arquivo ESD (versão projetada para atualizar o Windows 10). Media Tool Criação é a melhor escolha para download automático mídia de instalação correta :-)
kapitanrum
A etapa 4 (extrair o arquivo WIM) fez isso por mim. Excelente guia. Obrigado.
Ravi Wallau
1
etapa 6 falhar por mim com "os arquivos de origem não pode ser encontrado", erro 0x800f091f
simpleuser
Pesquisei no erro 0x800f091f e o problema pode estar na instalação do .NET Framework 3.5. Se você possui apenas a versão 4 ou superior, tente instalar a versão 3.5 também. Tente guia de instalação MS: msdn.microsoft.com/en-us/library/hh506443(v=vs.110).aspx
kapitanrum
4

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

Um WIM é apenas "rápido" compactado por unidades inquebráveis ​​de 4KB ou 16 KB, usando uma compactação rápida de Huffmann. Um ESD usa uma 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 de leitura e 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 dos segmentos, para alcançar uma compactação muito mais alta nível, principalmente quando existem 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 HTML, scripts incorporados etc.).

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

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

O formato ESD foi ajustado para permitir que a distribuição multilíngue completa do Windows 10 caiba 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 / gravar no WIM expandido) para compactá-la novamente em um novo ESD. A descompactação de um ESD para WIM é relativamente rápida, mas a compactação de um WIM para ESD requer muitos recursos de CPU e é muito mais longa (é por isso que você não pode ler / gravar diretamente em um ESD, mas pode fazê-lo facilmente em um WIM com recursos modestos). Utilização do CPU).

Quando você "monta" um ESD com o DISM, a primeira coisa a fazer é expandi-lo para um armazenamento temporário e agir como se fosse um WIM, para que você possa atualizar os arquivos nesse armazenamento local. Para desmontá-lo, serão necessárias duas etapas: recriar um WIM (muito rápido) e empacotá-lo novamente em um ESD (muito lento).

verdy_p
fonte
2

Resolvi o problema com o opengl.dll da seguinte maneira:

  1. Monte a imagem do Windows 10.

  2. Dism / Online / Imagem-de-limpeza / RestoreHealth / Origem: 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!

Vitaly Stelmakov
fonte
6
ESD ISO não é restaurado Imagem do Windows. Você deve usar SOMENTE WIM ISO, que pode ser baixado do microsoft.com/en-us/software-download/techbench
23W
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á a minha progressão:

  1. Isso começou para mim com uma falha do Windows Update (erro 0x800705b4).
  2. Em seguida, persegui esse erro ao solucionar problemas do Windows Update, WUResets, desativar antivírus, etc. Este link é um bom artigo que fornece opções para esse problema (embora elas não tenham me ajudado)
  3. Então eu segui o caminho do DISM e do SFC. Esta publicação ServerFault foi muito útil nessa tentativa. Infelizmente, nenhuma dessas opções ajudou. Eu ficava sabendo que eu tinha um arquivo opencl.dll corrompido e a execução de todos os tipos de variações do DISM / RestoreHealth não funcionava. Eu continuava recebendo 0x800f081f (os arquivos de origem não foram encontrados)
  4. Em seguida, tentei copiar manualmente o opencl.dll de uma ISO limpa para C: \ Windows \ SysWOW64. Isso nunca funcionou, mesmo depois de atrapalhar a propriedade, etc. Finalmente desabilitei o driver da GPU NVIDIA GeForce no Gerenciador de dispositivos (deixando um driver Intel ainda ativando a tela) e consegui copiar o opencl.dll limpo em C: \ Windows \ SysWOW64.

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

Portanto, em resumo, se você estiver enfrentando problemas com esses erros e nada parece funcionar, tente desativar os drivers da NVIDIA GeForce e tente algumas dessas etapas (ou copie manualmente em uma versão limpa da DLL).

Latão
fonte
1

Por não ter uma cópia local e, por um motivo separado, incapaz de baixar o arquivo ISO (o ISO não era do tipo Windows 10 que eu instalei), há uma solução de hotfix usada aqui que envolve o download de um arquivo especializado chamado "SFCFix ":

O SFCFix é um pequeno utilitário brilhante que é capaz de corrigir esse problema reparando / substituindo o arquivo dll corrompido.

Depois que o arquivo executável do SFCFix for baixado, mova-o para a área de trabalho.

Um arquivo ZIP contendo tudo o que o SFCFix precisa para reparar / substituir o arquivo opencl.dll corrompido. Você será solicitado pelo site a se registrar nele para obter acesso ao arquivo ZIP, você deve fazê-lo, pois é totalmente gratuito.

Após o download do sfcfix.zip, mova-o para a área de trabalho. Feche todos os programas abertos. Arraste o arquivo ZIP para o arquivo executável do programa SFCFix e, em seguida, libere-o.

O SFCFix será iniciado e começará a aplicar a correção do arquivo dll corrompido. Deixe funcionar sua mágica.

Depois que o SFCFix estiver pronto, ele criará um arquivo nomeado SFCFix.txtna sua área de trabalho. Abra este arquivo e, se o SFCFix tiver êxito em reparar / substituir o arquivo opencl.dll corrompido,

Observe que a execução do arquivo SFCFix.exe sem o hotfix ZIP será um processo demorado e lento que alcança muito pouco; é necessário executá-lo com o método de arrastar / soltar do arquivo ZIP e o resultado é quase instantâneo.

Martin
fonte
0

Você deve poder utilizar uma imagem esd, de acordo com o artigo técnico do DISM. Uma imagem ESD (entrega eletrônica de software) é simplesmente uma versão criptografada de um WIM e também utiliza um algoritmo de compactação muito melhor do que o formato WIM (geralmente uma compactação 1.5x melhor).

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

JW0914
fonte
0

Acabei de ir para outra máquina x64 do Windows 10 Pro e copiei o arquivo opencl.dll (do mesmo diretório). Em seguida, assumi a propriedade do opencl.dll inválido, o renomeei para opencl.old e copiei o novo. Reinicie novamente no modo de segurança e execute sfc / scannow e ele volta a funcionar corretamente. No meu caso, esse era o ÚNICO arquivo ruim listado em cbs.log ... 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 uma dll, uma cópia simples parece funcionar.

Chris
fonte
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á um erro, 0x800f081findependentemente do tipo de comando digitado. Também não ajuda a extrair o corretoinstall.wim do arquivo ESD. Por fim, tentei montar o arquivo WIM sem sucesso também.

Veja também discussões em https://www.sysnative.com/forums/windows-10-a/22564-dism-error-0x800f081f.html#post179723

Atualização: o erro persistente não tem nada a ver com o comando dism ou com os arquivos wim. Isso ocorre 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 removidos dali. Além disso, há duas referências no registro que precisam ser excluídas. Consulte o encadeamento sysnative vinculado para obter detalhes.

Gerd Röthig
fonte