| 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.DllNotFoundExceptionBłąd 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 Kontekst techniczny i porównanie z innymi problemami bibliotek - Błąd System.DllNotFoundExceptionBiblioteka 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.
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ątkuJedną 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 Kiedy trzeba poprosić o ocenę stanu sprzętu - Błąd System.DllNotFoundExceptionZgł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. |