Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa

Darmowa diagnoza laptopa

Dojazd do klienta bezpłatnie

Dojazd do klienta bezpłatnie

Laptopy zastępcze bezpłatnie

Laptopy zastępcze bezpłatnie

Odbiór i zwrot sprzętu bezpłatnie

Odbiór i zwrot sprzętu bezpłatnie

Błąd System.DllNotFoundException

Termin Definicja
Błąd System.DllNotFoundException

System.DllNotFoundException sygnalizuje, że aplikacja .NET próbuje wywołać funkcję z natywnej biblioteki DLL, której nie znaleziono w ścieżce wyszukiwania — dotyczy zwykle wywołań P/Invoke.

Czym jest błąd System.DllNotFoundException

Błąd System.DllNotFoundException pojawia się w środowisku .NET wtedy, gdy uruchomiony program próbuje załadować bibliotekę DLL, ale system nie potrafi jej odnaleźć albo nie może przygotować jej do działania. Najczęściej dotyczy to fragmentu aplikacji napisanego w kodzie zarządzanym, który korzysta z funkcji dostarczanych przez bibliotekę natywną. Takie połączenie jest spotykane między innymi przy obsłudze urządzeń, sterowników, kodeków, narzędzi graficznych, bibliotek kryptograficznych oraz komponentów komunikujących się bezpośrednio z systemem operacyjnym.

Sama nazwa wyjątku nie przesądza jeszcze, że pliku DLL fizycznie nie ma na dysku. Przyczyną może być brak biblioteki w katalogu aplikacji, nieprawidłowa ścieżka wyszukiwania, niedopasowana architektura procesu albo niespełniona zależność innej biblioteki. W praktyce komunikat może więc oznaczać zarówno rzeczywisty brak pliku, jak i problem z jego załadowaniem. Istotne jest również ustalenie, czy wyjątek występuje przy każdym uruchomieniu, czy dopiero po wybraniu określonej funkcji programu.

Wyjątek jest rzucany zwykle w momencie wykonania deklaracji lub wywołania P/Invoke, użycia mechanizmu DllImport, inicjalizacji komponentu korzystającego z kodu natywnego albo ładowania biblioteki za pomocą mechanizmów refleksji. Dlatego aplikacja może uruchamiać się pozornie prawidłowo, a błąd ujawniać się dopiero podczas drukowania, odczytu obrazu, połączenia z urządzeniem lub przetwarzania określonego formatu danych.

Kontekst techniczny i porównanie z innymi problemami bibliotek - Błąd System.DllNotFoundException

Biblioteka DLL jest plikiem zawierającym kod lub zasoby, z których może korzystać więcej niż jeden program. W aplikacjach .NET należy odróżnić biblioteki zarządzane od natywnych. Biblioteka zarządzana jest zwykle ładowana przez środowisko uruchomieniowe .NET i posiada metadane rozpoznawalne dla tego środowiska. Biblioteka natywna została skompilowana dla konkretnego systemu i architektury procesora, a aplikacja komunikuje się z nią za pośrednictwem określonego interfejsu.

System.DllNotFoundException różni się od FileNotFoundException, choć oba wyjątki mogą kojarzyć się z brakiem pliku. Pierwszy odnosi się przede wszystkim do próby załadowania biblioteki natywnej wskazanej przez kod wywołujący. Drugi może dotyczyć pliku używanego przez aplikację lub ładowanej biblioteki zarządzanej. Z kolei BadImageFormatException częściej wskazuje na problem z formatem lub zgodnością pliku, na przykład próbę użycia biblioteki przeznaczonej dla innej architektury procesu. Warto też odróżnić brak biblioteki od EntryPointNotFoundException, który oznacza, że plik został znaleziony, lecz nie zawiera funkcji o oczekiwanej nazwie lub sygnaturze.

Podczas analizy sprawdza się kolejność miejsc, w których środowisko szuka biblioteki. Znaczenie może mieć katalog uruchomieniowy programu, bieżący katalog procesu, konfiguracja systemu oraz lokalizacje zależne od używanego środowiska wykonawczego. Równie ważna jest zgodność architektury aplikacji i biblioteki. Program działający jako proces 64-bitowy może nie załadować komponentu przygotowanego wyłącznie dla środowiska 32-bitowego, a wymuszenie konkretnego trybu pracy może zmienić rezultat bez modyfikowania samego pliku DLL.

Nie należy też kopiować przypadkowych bibliotek pobranych z nieznanych stron. Plik może mieć właściwą nazwę, ale pochodzić z innej wersji programu, zawierać odmienne interfejsy albo wymagać kolejnych składników, których nadal brakuje. Bezpieczniejsze jest ustalenie, z jakiego pakietu pochodzi biblioteka, jaka wersja aplikacji jej potrzebuje i jakie wymagania wskazuje producent oprogramowania.

Typowe problemy prowadzące do wystąpienia wyjątku

Jedną z częstych przyczyn jest niepełna instalacja programu. W takiej sytuacji główny plik aplikacji znajduje się na dysku, ale komponent natywny nie został skopiowany, został usunięty przez program ochronny albo instalator zakończył pracę przed zapisaniem wszystkich zależności. Podobny skutek może wystąpić po przeniesieniu katalogu programu na inny komputer bez przeprowadzenia pełnej instalacji.

Błąd może pojawić się po aktualizacji aplikacji, gdy nowa wersja oczekuje innego wariantu biblioteki niż ten pozostawiony w dotychczasowym katalogu. Problematyczne bywają również ręczne podmiany plików, czyszczenie katalogów tymczasowych, przywracanie części plików z kopii zapasowej oraz usunięcie komponentu uznanego przez oprogramowanie zabezpieczające za podejrzany. W takich przypadkach sama reinstalacja głównego programu nie zawsze wystarcza, jeśli nie zostanie usunięta przyczyna blokująca instalację lub ładowanie biblioteki.

Osobną grupę stanowią niezgodności architektury i zależności. Biblioteka może wymagać dodatkowego środowiska uruchomieniowego, określonego pakietu systemowego albo innego komponentu producenta. Czasem komunikat wskazuje nazwę biblioteki, która istnieje, lecz jej własne zależności są niedostępne. Wtedy system może zwrócić błąd wyglądający jak brak wskazanego pliku, mimo że właściwy problem znajduje się niżej w łańcuchu ładowania.

Znaczenie ma także sposób uruchamiania programu. Aplikacja uruchomiona z innego skrótu, z poziomu usługi, z konsoli lub z katalogu sieciowego może otrzymać odmienną konfigurację ścieżek i uprawnień. Zmiana katalogu roboczego, ograniczenia konta użytkownika, polityka ochrony systemu albo blokada dostępu do pliku mogą sprawić, że zachowanie programu będzie różne dla różnych kont. W diagnostyce warto zapisać pełny komunikat, nazwę modułu, moment wystąpienia błędu oraz czynności wykonane bezpośrednio przed jego pojawieniem się.

Nie powinno się również dodawać przypadkowych katalogów do zmiennej PATH ani zastępować plików systemowych bibliotekami o tej samej nazwie. Takie działania mogą ukryć źródło problemu, spowodować uruchomienie niewłaściwej wersji komponentu i utrudnić późniejsze odtworzenie poprawnej konfiguracji.

Kiedy trzeba poprosić o ocenę stanu sprzętu - Błąd System.DllNotFoundException

Zgłoszenie do serwisu jest uzasadnione, gdy wyjątek powtarza się po ponownym uruchomieniu programu, pojawia się po aktualizacji systemu lub dotyczy kilku aplikacji korzystających z podobnych komponentów. Warto skorzystać z pomocy także wtedy, gdy nie wiadomo, czy brak biblioteki wynika z uszkodzonej instalacji, działania programu ochronnego, błędu dysku czy niezgodności środowiska. Szczególnej ostrożności wymaga sytuacja, w której komunikat pojawia się razem z samoczynnym zamykaniem programów, problemami z odczytem danych albo innymi błędami systemowymi.

Podczas przyjmowania urządzenia przydatne jest przekazanie nazwy programu, wersji systemu, dokładnej treści komunikatu i informacji o tym, czy problem występuje przy konkretnym działaniu. Jeżeli błąd wystąpił po instalacji sterownika, aktualizacji lub zmianie podzespołu, również należy to zaznaczyć. Pozwala to zawęzić analizę do właściwej biblioteki i jej zależności, zamiast ograniczać się do przypadkowego kopiowania plików DLL.

W Warszawskim Pogotowiu Komputerowym 24/7 można zlecić sprawdzenie takiego przypadku, gdy potrzebna jest ocena konfiguracji komputera, instalacji programu i zgodności używanych komponentów. Diagnostyka powinna obejmować nie tylko sam komunikat, lecz także źródło wywołania, stan powiązanych plików, sposób uruchamiania aplikacji oraz ewentualne ślady błędów w systemie. Dopiero na tej podstawie można bezpiecznie zdecydować, czy wystarczy naprawa instalacji, przywrócenie właściwych zależności, zmiana konfiguracji, czy też konieczne jest szersze sprawdzenie komputera.