Jak naprawić uszkodzony plik opencl.dll w systemie Windows 10, jeśli awarie SFC i DISM?

33

Naprawienie problemu zajęło mi kilka godzin, ponieważ lokalny magazyn składników został uszkodzony, a komputery uzyskują dostęp do lokalnego serwera WSUS zamiast publicznego serwera aktualizacji firmy Microsoft (i ponieważ bardzo rzadko używam Dism). W celach informacyjnych i aby pomóc innym osobom z tym samym problemem, napiszę opis problemu i przedstawię rozwiązanie.

Od czasu uaktualnienia do systemu Windows 10 Pro w wersji 1511 (kompilacja 10586) mam problem z uszkodzonym plikiem opencl.dll w kilku lokalizacjach.

Próbowałem sfc.exe /scannow, ale nie udało się rozwiązać problemu. Komunikaty o błędach to między innymi:

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

Okej, więc problem jest teraz jasny. Niestety SFC nie jest w stanie rozwiązać problemu, ponieważ lokalny magazyn komponentów również został uszkodzony. Niestety zgubiłem komunikaty o błędach wskazujące na uszkodzenie magazynu składników.

Więc próbowałem Dism /Online /Cleanup-Image /RestoreHealthbezskutecznie. Błąd kończy się błędem 0x800f081f , który wskazuje na inny problem z plikami źródłowymi.

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]

Patrząc na komunikaty o błędach, staje się jasne, że system Windows jest skonfigurowany do korzystania z naszego lokalnego serwera WSUS i dlatego Dism nie jest w stanie pobrać poprawnego pliku z repozytoriów. Chociaż jestem pewien, że mógłbym jakoś skonfigurować WSUS, aby zapewniał niezbędne pliki, nie wiem jak i potrzebuję szybkiej poprawki. (Jeśli ktoś wie, jak odpowiednio skonfigurować WSUS, proszę podać informacje).

Ograniczenie dostępu do lokalnej pamięci przez dodanie parametru /LimitAccessbyłoby bezużyteczne, ponieważ lokalny magazyn komponentów jest również uszkodzony, jak wspomniano wcześniej.

Ten problem wystąpił na dwóch komputerach. Odświeżania systemu Windows 10 nie rozwiąże problemu.

Daniel
źródło
fwiw jest tutaj długi wątek answer.microsoft.com/en-us/windows/forum/… o problemach z tą biblioteką dll.
Rory

Odpowiedzi:

42

Aby rozwiązać ten problem, musisz mieć ISO dokładnie zainstalowanej kompilacji.

  1. Zamontuj obraz ISO.
  2. Utwórz katalog tymczasowy, aby zamontować plik obrazu systemu Windows (WIM).
    mkdir C:\WIM
  3. Zamontuj plik WIM.
    Dism /Mount-Wim /WimFile:D:\sources\install.wim /index:1 /MountDir:C:\WIM /ReadOnly
  4. Uruchom Dism z następującymi parametrami.
    Dism /Online /Cleanup-Image /RestoreHealth /Source:C:\WIM\Windows /LimitAccess
  5. Po zakończeniu odmontuj obraz i usuń folder
    Dism /Unmount-Wim /MountDir:C:\WIM /Discard rmdir C:\WIM
  6. Ponowne uruchomienie komputera jest obowiązkowe, w przeciwnym razie SFC i DISM nadal będą wyświetlać błędy.

To powinno rozwiązać problem.

Edytuj
Jak wskazano w komentarzach, podejście może być bardziej bezpośrednie. TL; DR jest takie, że to nie działało dla mnie, stąd moje bardziej szczegółowe podejście. Jestem jednak zainteresowany, jeśli miałbyś jakieś problemy z bezpośrednim podejściem. Proszę skomentuj.

Daniel
źródło
2
możesz wskazać WIM bez konieczności montowania WIM: superuser.com/a/870956/174557
magicandre1981
3
@ magicandre1981 dziękuję za komentarz. Przeczytałem o tym i próbowałem bezskutecznie. Zawsze kończyło się to błędem, to znaczy 0x800f081f, dobrze pamiętam. Zaskakujące było to, że nie mogłem znaleźć niczego dotyczącego /source:wimparametru w oficjalnej dokumentacji opcji wiersza poleceń Dism .
Daniel
Przeczytałem to tutaj, aby włączyć funkcje: blogs.technet.com/b/joscon/archive/2013/03/29/…
magicandre1981
2
pomogło to również innym użytkownikom: borncity.com/blog/2015/12/09/... dziwne, że montowanie działa, ale nie przechodzi bezpośrednio przez WIM.
magicandre1981
4
Po pobraniu obrazu systemu Windows 10 za pomocą narzędzia Media Creation Tool, tutaj: microsoft.com/en-ca/software-download/windows10 powstały obraz img zawierał plik install.esd, który musiał zostać przekonwertowany na WIM, aby można go było zamontować przez Dism. Użyłem do tego NTLite. Potem instrukcje Daniela zadziałały. Pamiętaj tylko, że parametr / index w trzecim kroku powinien prawdopodobnie odzwierciedlać wersję systemu Windows, Pro lub Home, którą przywracasz (innymi słowy, użyj / index: 1 dla Pro i / index: 2 dla Home)
Eli B.
10

Z różnych forów internetowych przygotowałem następującą procedurę naprawy:

  1. Pobierz MediaCreationTool ze strony http://go.microsoft.com/fwlink/?LinkId=691209
  2. Pobierz Windows 10 Pro ISO za pomocą MediaCreationTool.exedoc:\temp\windows.iso
  3. Użyj 7-zip do wyodrębnienia pliku c:\temp\windows.isodo folderuc:\temp\windows
  4. Konwertuj install.esdnainstall.wim

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

  5. Sprawdź indeks i wersję systemu Windows w indeksie .wimpliku
    -służy do następnego polecenia Dism w parametrze/Source:wim:path_to_wim:[index]

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

  6. Przywróć składniki systemu Windows z pobranego i przekonwertowanego obrazu systemu Windows (wim):

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

  7. Napraw uszkodzone pliki:

    sfc /scannow

    Naprawi uszkodzone pliki - komunikat o powodzeniu: Windows Resource Protection found corrupt files and successfully repaired them.

  8. Uruchom ponownie system Windows
  9. Sprawdź ponownie pliki systemowe, aby upewnić się, że naprawa zakończyła się powodzeniem:

    sfc /scannow

    Komunikat o powodzeniu po skanowaniu: Windows Resource Protection did not find any integrity violations.

kapitanrum
źródło
1
Dzięki temu ostatecznie naprawiłem moją instalację systemu Windows 10, którą niedawno wykonałem czystą instalację. Wygląda na to, że wpadłeś w błąd, a sfc zawiedzie wkrótce nawet po wykonaniu czystej instalacji! W każdym razie zobaczysz, jak długo tym razem zostanie naprawiony! Zgadnij, że Microsoft nadal nie naprawił go w najnowszej aktualizacji Win 10, ponieważ wydaje się, że jest to znany problem z kompilacją 1511 news.softpedia.com/news/... ps nie musiał robić kroku 4, odkąd install.im był już tam, kiedy ja wyodrębniono ISO systemu Windows.
daveangel
Dziękuję za odpowiedź. Kontroler plików systemowych zostanie uszkodzony po zainstalowaniu graficznych sterowników. Ale teraz wystarczy naprawić system tylko z uruchomionym SFC / SCANNOW - Wygląda na to, że teraz jest dostępna odpowiednia wersja pliku opencl.dll w folderze winsxs. PS: To prawda, krok 4 może być pominięty, jeśli pobierasz rozruchowy ISO, ale narzędzie do tworzenia nośników pobiera tylko plik ESD (wersja przeznaczona do uaktualnienia systemu Windows 10). Media Creation Tool to najlepszy wybór do automatycznego pobierania poprawnych nośników instalacyjnych :-)
kapitanrum
Krok 4 (rozpakowanie pliku WIM) zrobił to dla mnie. Doskonały przewodnik. Dzięki.
Ravi Wallau,
1
krok 6 kończy się niepowodzeniem, gdy „nie można znaleźć plików źródłowych”, błąd 0x800f091f
simpleuser
Poszukałem błędu 0x800f091f i problem może dotyczyć instalacji .NET Framework 3.5. Jeśli masz tylko wersję 4+, spróbuj także zainstalować wersję 3.5. Wypróbuj przewodnik instalacji MS: msdn.microsoft.com/en-us/library/hh506443(v=vs.110).aspx
kapitanrum
4

ESD nie jest „zaszyfrowanym” WIM, jest to WIM, który został bardzo upakowany / ponownie zakodowany bardzo różnie (o bardziej złożonej strukturze).

WIM jest po prostu „szybki” skompresowany przez niezniszczalne jednostki 4KB lub 16KB, przy użyciu szybkiej kompresji Huffmanna. ESD wykorzystuje bardziej zaawansowaną kompresję opartą na LZ bez ograniczeń wielkości bloku. Ta kompresja nie pozwala na otwarcie obrazu w trybie do odczytu i zapisu, ponieważ kompresja jest globalna (każdy plik w archiwum nie jest już osobno kompresowany, wiele plików logicznych może współdzielić faktyczne miejsce przechowywania segmentów, aby osiągnąć wyższą kompresję poziom, zwłaszcza gdy istnieje wiele małych plików ze wspólnymi częściami nagłówków, takimi jak zbiory ikon lub części ich danych podpisu cyfrowego, informacje o prawach autorskich, nagłówki HTML, osadzone skrypty i tak dalej).

SWM to wieloczęściowy WIM, który został podzielony na wiele plików o mniejszych rozmiarach z (przybliżonym) maksymalnym rozmiarem, ale nadal jest zapisywalny i może być przechowywany na wielu dyskach DVD.

Dostawcy CBS zezwalają na kilka formatów archiwizacji, które mogą być obsługiwane przez DISM, w tym WIM, CAB, ZIP, VHD, VHDX, ISO wielu sesji ... Ale system Windows jest wyposażony w dwóch wbudowanych dostawców formatów WIM i ESD (ESD jest nowością w systemie Windows 10, w systemie Windows 8 obsługiwany był tylko format WIM, ale obrazy były większe)

Format ESD został dostrojony, aby umożliwić pełną wielojęzyczną dystrybucję systemu Windows 10 na jednym dysku DVD o pojemności mniejszej niż 3 GB ...

Możesz przekształcić ESD w WIM, ale wynikiem będzie znacznie większy plik. Możliwa jest również konwersja odwrotna (dzięki czemu można czytać i zapisywać w rozszerzonym WIM), aby spakować ją ponownie do nowego ESD. Dekompresowanie ESD do WIM jest względnie szybkie, ale kompresja WIM do ESD wymaga dużej ilości zasobów procesora i jest znacznie dłuższa (dlatego nie można odczytać-zapisać bezpośrednio do ESD, ale można to zrobić dość łatwo w WIM przy użyciu skromnego Użycie procesora).

Po „zamontowaniu” ESD za pomocą DISM, pierwszą rzeczą, którą zrobi, będzie rozszerzenie ESD do tymczasowego magazynu i działanie na nim tak, jakby to był WIM, aby można było aktualizować pliki w tym lokalnym magazynie. Odmontowanie będzie wymagało dwóch kroków: odtworzenia WIM (dość szybko), a następnie spakowanie go ponownie do ESD (bardzo wolno).

verdy_p
źródło
2

Rozwiązałem problem z opengl.dll w następujący sposób:

  1. Zamontuj obraz systemu Windows 10.

  2. Dism / Online / 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_3dae054 \ b569

  3. sfc / scannow

Powodzenia!

Witalij Stelmakow
źródło
6
ESD ISO nie jest przywracany Obraz systemu Windows. Musisz używać TYLKO ISO WIM, którą możesz pobrać ze strony microsoft.com/en-us/software-download/techbench
23W
2

Spędziłem kilka dni, idąc tymi ścieżkami i w końcu znalazłem rozwiązanie mojej sytuacji. Korzystam z systemu Windows 10 w wersji 1511 kompilacja 10586.545. Oto mój postęp:

  1. Zaczęło się to od błędu Windows Update (błąd 0x800705b4).
  2. Następnie zgoniłem ten błąd, wykonując narzędzia do rozwiązywania problemów z Windows Update, WUReset, wyłączając program antywirusowy itp. Ten link jest dobrym artykułem zawierającym opcje dla tego problemu (chociaż mi nie pomogły)
  3. Potem poszedłem ścieżką DISM i SFC. Ten post ServerFault był bardzo pomocny w tej próbie. Niestety żadna z tych opcji nie pomogła. Powtarzano mi, że mam uszkodzony plik opencl.dll, a uruchamianie wszelkiego rodzaju odmian DISM / RestoreHealth nie działało. Wciąż otrzymywałem 0x800f081f (nie można znaleźć plików źródłowych)
  4. Następnie próbowałem ręcznie skopiować opencl.dll z czystego ISO do C: \ Windows \ SysWOW64. To nigdy nie zadziałało, nawet po bałaganie się przejęciem własności itp. W końcu wyłączyłem sterownik karty graficznej NVIDIA GeForce w Menedżerze urządzeń (Pozostawiając sterownik Intel nadal umożliwiający wyświetlanie) i byłem w stanie skopiować czysty plik opencl.dll do C: \ Windows \ SysWOW64.

Odtąd Windows Update znów zaczął działać.

Podsumowując, jeśli zmagasz się z tymi błędami i nic nie działa, spróbuj wyłączyć sterowniki NVIDIA GeForce, a następnie spróbuj wykonać niektóre z tych kroków (lub ręcznie skopiować w czystej wersji biblioteki DLL).

Mosiądz
źródło
1

Z powodu braku lokalnej kopii i z osobnego powodu niemożności pobrania pliku ISO (ISO nie był typu Windows 10, który zainstalowałem) Jest tutaj rozwiązanie poprawki, z którego skorzystałem, polegające na pobraniu specjalistycznego pliku o nazwie „SFCFix „:

SFCFix to genialne małe narzędzie, które jest w stanie rozwiązać ten problem, naprawiając / zastępując uszkodzony plik dll.

Po pobraniu pliku wykonywalnego dla SFCFix przenieś go na pulpit.

Plik ZIP zawierający wszystko, czego potrzebuje SFCFix , aby naprawić / wymienić uszkodzony plik opencl.dll. Witryna poprosi Cię o rejestrację w celu uzyskania dostępu do pliku ZIP, powinieneś to zrobić, ponieważ jest on całkowicie bezpłatny.

Po pobraniu sfcfix.zip przenieś go na pulpit. Zamknij wszystkie otwarte programy. Przeciągnij plik ZIP do pliku wykonywalnego programu SFCFix, a następnie zwolnij go.

SFCFix uruchomi się i zacznie stosować poprawkę do uszkodzonego pliku dll. Niech zadziała jego magia.

Po zakończeniu SFCFix utworzy plik o nazwie SFCFix.txtna pulpicie. Otwórz ten plik, a jeśli SFCFix naprawił / zastąpił uszkodzony plik opencl.dll,

Należy pamiętać, że uruchomienie pliku SFCFix.exe bez pliku ZIP poprawki będzie długim powolnym procesem, który osiąga bardzo niewiele, należy go uruchomić metodą przeciągania / upuszczania pliku ZIP, a wynik jest prawie natychmiastowy.

Jaskółka oknówka
źródło
0

Powinieneś być w stanie wykorzystać obraz esd, zgodnie z artykułem DISM technet. Obraz ESD (Electronic Software Delivery) to po prostu zaszyfrowana wersja WIM, a także wykorzystuje znacznie lepszy algorytm kompresji niż format WIM (ogólnie około 1,5x lepszej kompresji).

Jeśli masz tylko ESD, ale wolisz użyć WIM, możesz przekonwertować ESD na WIM za pomocą polecenia eksportu DISM. Możesz także przekonwertować WIM na ESD, określając / kompresuj: odzyskiwanie w ramach polecenia eksportu lub przechwytywania. Konwersja jednego na drugi wymaga dużych zasobów i dlatego zaleca się korzystanie ze skryptu ESD na WIM, który został napisany wiele lat temu i jest dostępny na forum MSFN. Korzystając ze skryptu, tylko ~ 50% zasobów systemowych jest przeznaczonych na eksport w porównaniu do 90% +, które są generalnie wykorzystywane do eksportu.

JW0914
źródło
0

Właśnie poszedłem na inną maszynę Windows 10 Pro x64 i skopiowałem plik opencl.dll (z tego samego katalogu). Następnie przejąłem na własność zły opencl.dll, przemianowałem go na opencl.old i skopiowałem w nowym. Uruchom ponownie w trybie awaryjnym i uruchom sfc / scannow, a wszystko wróci do normy. W moim przypadku był to TYLKO zły plik wymieniony w cbs.log ... Widzę, gdzie lepiej byłoby mieć działanie sfc, jeśli masz wiele uszkodzonych plików i nie chcesz łatać każdego z nich osobno. Ale jeśli twoim problemem jest tylko jedna biblioteka dll, to prosta kopia wydaje się działać.

Chris
źródło
0

Wygląda na to, że obraz instalacyjny ( install.esd) z nośnika instalacyjnego aktualizacji twórcy jest niezgodny z opisaną tutaj metodą DISM. Otrzymasz błąd 0x800f081fbez względu na to, jakiego rodzaju polecenie wpiszesz. Nie pomaga również wyodrębnić prawidłowego install.wimpliku ESD. Wreszcie próbowałem nawet zamontować plik WIM, ale bezskutecznie.

Zobacz także dyskusje na https://www.sysnative.com/forums/windows-10-a/22564-dism-error-0x800f081f.html#post179723

Aktualizacja: utrzymujący się błąd nie ma nic wspólnego z poleceniem DIS ani plikami WIM. Wynika to z pakietu o nazwie Microsoft-Windows-TestRoot-and-FlightSigning-Package, dla którego nie są dostępne żadne działające źródła. Pliki znajdują się w C: \ Windows \ Servicing \ Packages i należy je stąd przenieść. Ponadto w rejestrze są dwa odniesienia, które należy usunąć. Szczegółowe informacje można znaleźć w połączonym wątku systemowym.

Gerd Röthig
źródło