Błędy inicjowania programu .NET Framework: zarządzanie środowiskiem użytkownika
Uwaga
Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.
System aktywacji środowiska uruchomieniowego języka wspólnego (CLR) określa wersję środowiska CLR, która będzie używana do uruchamiania kodu aplikacji zarządzanej. W niektórych przypadkach system aktywacji może nie być w stanie odnaleźć wersji środowiska CLR do załadowania. Taka sytuacja zwykle występuje, gdy aplikacja wymaga wersji środowiska CLR, która jest nieprawidłowa lub nie jest zainstalowana na danym komputerze. Jeśli żądana wersja nie zostanie znaleziona, system aktywacji CLR zwraca kod błędu HRESULT z funkcji lub interfejsu, który został wywołany i może wyświetlić komunikat o błędzie dla użytkownika, który uruchamia aplikację. Ten artykuł zawiera listę kodów HRESULT i wyjaśniono, jak można zapobiec wyświetlaniu komunikatu o błędzie.
Środowisko CLR udostępnia infrastrukturę rejestrowania, która ułatwia debugowanie problemów z aktywacją środowiska CLR, zgodnie z opisem w temacie Instrukcje: Debugowanie problemów z aktywacją CLR. Nie należy mylić tej infrastruktury z dziennikami powiązań zestawów, które są zupełnie inne.
Kody HRESULT aktywacji CLR
Interfejsy API aktywacji CLR zwracają kody HRESULT, aby zgłosić wynik operacji aktywacji na hoście. Hosty CLR powinny zawsze skonsultować się z tymi wartościami zwracanymi przed kontynuowaniem dodatkowych operacji.
CLR_E_SHIM_RUNTIMELOAD
CLR_E_SHIM_RUNTIMEEXPORT
CLR_E_SHIM_INSTALLROOT
CLR_E_SHIM_INSTALLCOMP
CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND
CLR_E_SHIM_SHUTDOWNINPROGRESS
Interfejs użytkownika dla błędów inicjowania
Jeśli system aktywacji CLR nie może załadować poprawnej wersji środowiska uruchomieniowego wymaganej przez aplikację, zostanie wyświetlony komunikat o błędzie dla użytkowników, aby poinformować ich, że komputer nie jest prawidłowo skonfigurowany do uruchamiania aplikacji i zapewnia im możliwość rozwiązania tej sytuacji. Poniższy komunikat o błędzie jest zwykle przedstawiony w tej sytuacji. Użytkownik może wybrać opcję Tak , aby przejść do witryny internetowej firmy Microsoft, w której może pobrać poprawną wersję programu .NET Framework dla aplikacji.
Rozwiązywanie błędu inicjowania
Jako deweloper masz różne opcje kontrolowania komunikatu o błędzie inicjowania programu .NET Framework. Na przykład możesz użyć flagi interfejsu API, aby zapobiec wyświetlaniu komunikatu zgodnie z opisem w następnej sekcji. Jednak nadal trzeba rozwiązać problem uniemożliwiający aplikacji ładowanie żądanego środowiska uruchomieniowego. W przeciwnym razie aplikacja może w ogóle nie działać lub niektóre funkcje mogą być niedostępne.
Aby rozwiązać podstawowe problemy i zapewnić najlepsze środowisko użytkownika (mniej komunikatów o błędach), zalecamy wykonanie następujących czynności:
W przypadku aplikacji .NET Framework 3.5 (i starszych): Skonfiguruj aplikację pod kątem obsługi programu .NET Framework 4 lub nowszych wersji (zobacz instrukcje).
W przypadku aplikacji .NET Framework 4: zainstaluj pakiet redystrybucyjny programu .NET Framework 4 w ramach konfiguracji aplikacji. Zobacz Przewodnik wdrażania dla deweloperów.
Kontrolowanie komunikatu o błędzie
Wyświetlenie komunikatu o błędzie informującego o tym, że żądana wersja programu .NET Framework nie została znaleziona, można wyświetlić jako pomocną usługę lub drobne irytowanie dla użytkowników. W obu przypadkach możesz kontrolować ten interfejs użytkownika, przekazując flagi do interfejsów API aktywacji.
Metoda ICLRMetaHostPolicy::GetRequestedRuntime akceptuje element członkowski wyliczania METAHOST_POLICY_FLAGS jako dane wejściowe. Możesz dołączyć flagę METAHOST_POLICY_SHOW_ERROR_DIALOG, aby zażądać komunikatu o błędzie, jeśli żądana wersja środowiska CLR nie zostanie znaleziona. Domyślnie komunikat o błędzie nie jest wyświetlany. (Metoda ICLRMetaHost::GetRuntime nie akceptuje tej flagi i nie udostępnia żadnego innego sposobu wyświetlania komunikatu o błędzie.
System Windows udostępnia funkcję SetErrorMode , której można użyć do deklarowania, czy komunikaty o błędach mają być wyświetlane w wyniku kodu uruchamianego w ramach procesu. Możesz określić flagę SEM_FAILCRITICALERRORS, aby zapobiec wyświetlaniu komunikatu o błędzie.
Jednak w niektórych scenariuszach ważne jest zastąpienie ustawienia SEM_FAILCRITICALERRORS ustawionego przez proces aplikacji. Jeśli na przykład masz natywny składnik COM hostujący clR i hostowany w procesie, w którym ustawiono SEM_FAILCRITICALERRORS, możesz przesłonić flagę, w zależności od wpływu wyświetlania komunikatów o błędach w danym procesie aplikacji. W takim przypadku można użyć jednej z następujących flag, aby zastąpić SEM_FAILCRITICALERRORS:
Użyj METAHOST_POLICY_IGNORE_ERROR_MODE z metodą ICLRMetaHostPolicy::GetRequestedRuntime .
Użyj RUNTIME_INFO_IGNORE_ERROR_MODE z funkcją GetRequestedRuntimeInfo .
Zasady interfejsu użytkownika dla hostów udostępnianych przez clR
ClR zawiera zestaw hostów dla różnych scenariuszy, a wszystkie te hosty wyświetlają komunikat o błędzie, gdy napotkają problemy z ładowaniem wymaganej wersji środowiska uruchomieniowego. Poniższa tabela zawiera listę hostów i ich zasad komunikatów o błędach.
Host CLR | opis | Zasady komunikatu o błędzie | Czy komunikat o błędzie może zostać wyłączony? |
---|---|---|---|
Zarządzany host EXE | Uruchamia zarządzane eksesy. | Jest wyświetlany w przypadku braku wersji programu .NET Framework | Nie. |
Zarządzany host COM | Ładuje zarządzane składniki COM do procesu. | Jest wyświetlany w przypadku braku wersji programu .NET Framework | Tak, ustawiając flagę SEM_FAILCRITICALERRORS |
Host ClickOnce | Uruchamia aplikacje ClickOnce. | Jest wyświetlany w przypadku braku wersji programu .NET Framework, począwszy od programu .NET Framework 4.5 | Nie. |
Host XBAP | Uruchamia aplikacje WPF XBAP. | Jest wyświetlany w przypadku braku wersji programu .NET Framework, począwszy od programu .NET Framework 4.5 | Nie. |
Zachowanie i interfejs użytkownika systemu Windows 8
System aktywacji CLR zapewnia takie samo zachowanie i interfejs użytkownika w systemie Windows 8, jak w innych wersjach systemu operacyjnego Windows, z wyjątkiem sytuacji, gdy napotka problemy z ładowaniem ŚRODOWISKA CLR 2.0. System Windows 8 zawiera program .NET Framework 4.5, który używa środowiska CLR 4.5. Jednak system Windows 8 nie obejmuje programu .NET Framework 2.0, 3.0 lub 3.5, które używają środowiska CLR 2.0. W związku z tym aplikacje zależne od środowiska CLR 2.0 nie są domyślnie uruchamiane w systemie Windows 8. Zamiast tego wyświetlają następujące okno dialogowe, aby umożliwić użytkownikom instalowanie programu .NET Framework 3.5. Użytkownicy mogą również włączyć program .NET Framework 3.5 w Panel sterowania. Obie opcje zostały omówione w artykule Instalowanie programu .NET Framework 3.5 w systemach Windows 11, Windows 10, Windows 8.1 i Windows 8.
Uwaga
Program .NET Framework 4.5 zastępuje program .NET Framework 4 (CLR 4) na komputerze użytkownika. W związku z tym aplikacje .NET Framework 4 działają bezproblemowo bez wyświetlania tego okna dialogowego w systemie Windows 8.
Po zainstalowaniu programu .NET Framework 3.5 użytkownicy mogą uruchamiać aplikacje zależne od programu .NET Framework 2.0, 3.0 lub 3.5 na komputerach z systemem Windows 8. Mogą również uruchamiać aplikacje .NET Framework 1.0 i 1.1, pod warunkiem, że te aplikacje nie są jawnie skonfigurowane do uruchamiania tylko w programie .NET Framework 1.0 lub 1.1. Zobacz Migrowanie z programu .NET Framework 1.1.
Począwszy od programu .NET Framework 4.5, ulepszono rejestrowanie aktywacji ŚRODOWISKA CLR w celu uwzględnienia wpisów dziennika rekordu, kiedy i dlaczego jest wyświetlany komunikat o błędzie inicjowania. Aby uzyskać więcej informacji, zobacz How to: Debug CLR Activation Issues (Instrukcje: debugowanie problemów z aktywacją środowiska CLR).