Что делать при ошибке .NET Framework: Initialization error


Ошибки инициализации платформы .NET Framework: управление пользовательской средой

Система активации среды CLR определяет версию среды CLR, которая будет использоваться для выполнения управляемого кода приложения. В некоторых случаях система активации может не найти версию среды CLR для загрузки. Эта ситуация обычно возникает в том случае, если приложение требует версии среды CLR, которая недопустима или не установлена на данном компьютере. Если запрошенная версия не найдена, то система активации среды CLR получает код ошибки HRESULT из вызванных функции или интерфейса и может отобразить сообщение об ошибке для пользователя, запустившего приложение. В этой статье приводится список кодов HRESULT и объясняется, как можно запретить отображение сообщения об ошибке.

Среда CLR предоставляет инфраструктуру ведения журнала для облегчения отладки проблем активации среды CLR, как описано в разделе Практическое руководство. Отладка проблем при активации среды CLR. Эту инфраструктуру не следует путать с журналами привязки сборок, которая полностью отличается.

Коды HRESULT активации CLR

Интерфейсы API активации среды CLR возвращают коды HRESULT, чтобы сообщить о результатах операции активации основному приложению. Основные приложения среды CLR должны всегда обращаться к этими возвращаемым значениям, прежде чем предпринимать какие-либо дополнительные действия.

  • CLR_E_SHIM_RUNTIMELOAD
  • CLR_E_SHIM_RUNTIMEEXPORT
  • CLR_E_SHIM_INSTALLROOT
  • CLR_E_SHIM_INSTALLCOMP
  • CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND
  • CLR_E_SHIM_SHUTDOWNINPROGRESS

Пользовательский интерфейс для ошибок инициализации

Если системе активации среды CLR не удается загрузить правильную версию среды выполнения, которая требуется приложению, она отображает сообщение об ошибке, чтобы уведомить пользователя, что компьютер не настроен должным образом для запуска приложения, и предоставить с возможность исправить ситуацию. Обычно в такой ситуации отображается следующее сообщение об ошибке. Пользователь может выбрать Да, чтобы перейти к веб-сайту Майкрософт, где он может загрузить правильную версию платформы .NET Framework для приложения.

Диалоговое окно платформа .NET Framework Ошибка инициализации

Устранение ошибок инициализации

В распоряжении разработчика имеются различные параметры для контроля сообщений об ошибках инициализации платформы .NET Framework. Например, можно использовать флаг API для запрета отображения сообщения, как описано в следующем разделе. Тем не менее причину, по которой приложение не смогло загрузить нужную среду выполнения, нужно устранить. В противном случае приложение не сможет работать либо часть функций будет недоступна.

Для разрешения проблем и наилучшего взаимодействия с пользователем (меньшее количество сообщений об ошибках), рекомендуется следующее:

  • Для приложений на .NET Framework 3.5 (и более ранних версий): настройте приложение для поддержки .NET Framework 4 или более поздней версии (см. раздел Инструкции).
  • Для приложений .NET Framework версии 4: установите распространяемый пакет платформы .NET Framework 4 в составе установки приложения. См. раздел Руководство по развертыванию для разработчиков.

Управление сообщениями об ошибках

Отображение сообщения об ошибках для уведомления о том, что запрошенная версия платформы .NET Framework не найдена, можно рассматривать как полезную услугу или источник раздражения для пользователя. В любом случае этим пользовательским интерфейсом можно управлять, передавая флаги в API активации.

Метод ICLRMetaHostPolicy::GetRequestedRuntime принимает в качестве входных данных элемент перечисления METAHOST_POLICY_FLAGS. Можно включить флаг METAHOST_POLICY_SHOW_ERROR_DIALOG для запроса сообщения об ошибке, если запрошенная версия среды CLR не будет найдена. По умолчанию сообщение об ошибке не отображается. (Метод ICLRMetaHost::GetRuntime не поддерживает этот флаг и не предоставляет иных способов отобразить сообщение об ошибке.)

Windows предоставляет функцию SetErrorMode, с помощью которой можно объявить, должны ли сообщения об ошибках отображаться как результат выполнения кода, выполняемого внутри процесса. Можно указать флаг SEM_FAILCRITICALERRORS, чтобы запретить отображение сообщения об ошибке.

Но в некоторых случаях важно переопределить параметр SEM_FAILCRITICALERRORS, установленный процессом приложения. Например, если имеется собственный компонент COM, в котором находится среда CLR и расположенный в процессе, для которого установлен флаг SEM_FAILCRITICALERRORS, можно переопределить флаг в зависимости от влияния отображения сообщений об ошибках в пределах данного процесса приложения. В этом случае для переопределения SEM_FAILCRITICALERRORS можно воспользоваться одним из следующих флагов:

  • Используйте METAHOST_POLICY_IGNORE_ERROR_MODE с методом ICLRMetaHostPolicy::GetRequestedRuntime.
  • Используйте RUNTIME_INFO_IGNORE_ERROR_MODE с функцией GetRequestedRuntimeInfo.

Политика пользовательского интерфейса для узлов в среде CLR

Среда CLR включает в себя набор узлов для различных сценариев. Все эти узлы отображают сообщение об ошибке при возникновении проблем с загрузкой необходимой версии среды выполнения. В следующей таблице приводится список узлов и их политик сообщений об ошибках.

Узел CLRОписаниеПолитика сообщения об ошибкахМожно ли отключить сообщение об ошибке?
Узел управляемых EXE-файловЗапускает управляемые EXE-файлы.Отображается в случае отсутствия версии платформы .NET FrameworkНет
Узел управляемого COMЗагружает управляемые компоненты COM в процесс.Отображается в случае отсутствия версии платформы .NET FrameworkДа, установив флаг SEM_FAILCRITICALERRORS
Узел ClickOnceЗапускает приложения ClickOnce.Отображается в случае отсутствия версии платформы .NET Framework начиная с .NET Framework 4.5Нет
Узел XBAPЗапускает приложения WPF XBAP.Отображается в случае отсутствия версии платформы .NET Framework начиная с .NET Framework 4.5Нет
Новые статьи:  Acronis True Image: создание загрузочной флешки

Поведение и пользовательский интерфейс Windows 8

Система активации CLR обеспечивает такое же поведение и пользовательского интерфейса в Windows 8, как и в других версиях операционной системы Windows, за исключением ситуаций с возникающими при загрузке CLR 2.0 проблемами. Windows 8 включает платформа .NET Framework 4.5, в которой используется среда CLR 4.5. Однако Windows 8 не включает платформа .NET Framework 2.0, 3.0 или 3.5, в которых используется среда CLR 2.0. В результате приложения, зависящие от CLR 2.0, по умолчанию не будут работать в Windows 8. Вместо этого они отображают следующее диалоговое окно, чтобы пользователи могли установить платформа .NET Framework 3.5. Пользователи также могут включить платформу .NET Framework 3.5 из панели управления. Обе возможности рассматриваются в статье Установка платформы .NET Framework 3.5 в Windows 11, Windows 10, Windows 8.1 и Windows 8.

Диалоговое окно для установки версии 3.5 на Windows 8

.NET Framework 4.5 заменяет .NET Framework 4 (среда CLR 4) на компьютере пользователя. Поэтому приложения .NET Framework 4 без проблем выполняются в Windows 8 без отображения этого диалогового окна.

После установки платформа .NET Framework 3.5 пользователи могут запускать приложения, зависящие от платформа .NET Framework 2.0, 3.0 или 3.5, на своих Windows 8 компьютерах. Они также могут запускать приложения платформы .NET Framework 1.0 и 1.1, если эти приложения не настроены явным образом для запуска только на платформе .NET Framework 1.0 или 1.1. См. раздел Миграция с платформы .NET Framework 1.1.

Начиная с платформа .NET Framework 4.5, ведение журнала активации СРЕДЫ CLR улучшено, включив записи журнала, которые записывают, когда и почему отображается сообщение об ошибке инициализации. Дополнительные сведения см. в разделе Практическое руководство. Отладка проблем при активации среды CLR.

См. также

  • Руководство по развертыванию для разработчиков
  • Практическое руководство. Настройка приложения для включения поддержки .NET Framework версии 4 и выше
  • Практическое руководство. Отладка проблем при активации среды CLR
  • Установка .NET Framework 3.5 в Windows 11, Windows 10, Windows 8.1 и Windows 8

.NET Framework initialization errors: Managing the user experience

The common language runtime (CLR) activation system determines the version of the CLR that will be used to run managed application code. In some cases, the activation system might not be able to find a version of the CLR to load. This situation typically occurs when an application requires a CLR version that is invalid or not installed on a given computer. If the requested version is not found, the CLR activation system returns an HRESULT error code from the function or interface that was called, and may display an error message to the user who is running the application. This article provides a list of HRESULT codes and explains how you can prevent the error message from being displayed.

The CLR provides logging infrastructure to help you debug CLR activation issues, as described in How to: Debug CLR Activation Issues. This infrastructure should not be confused with assembly binding logs, which are entirely different.

CLR activation HRESULT codes

The CLR activation APIs return HRESULT codes to report the result of an activation operation to a host. CLR hosts should always consult these return values before proceeding with additional operations.

  • CLR_E_SHIM_RUNTIMELOAD
  • CLR_E_SHIM_RUNTIMEEXPORT
  • CLR_E_SHIM_INSTALLROOT
  • CLR_E_SHIM_INSTALLCOMP
  • CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND
  • CLR_E_SHIM_SHUTDOWNINPROGRESS

UI for initialization errors

If the CLR activation system cannot load the correct version of the runtime that is required by an application, it displays an error message to users to inform them that their computer is not properly configured to run the application, and provides them with an opportunity to remedy the situation. The following error message is typically presented in this situation. The user can choose Yes to go to a Microsoft website where they can download the correct .NET Framework version for the application.

Новые статьи:  Чертим в КОМПАС-3D

.NET Framework Initialization Error dialog box

Resolving the initialization error

As a developer, you have a variety of options for controlling the .NET Framework initialization error message. For example, you can use an API flag to prevent the message from being displayed, as discussed in the next section. However, you still have to resolve the issue that prevented your application from loading the requested runtime. Otherwise, your application may not run at all, or some functionality may not be available.

To resolve the underlying issues and provide the best user experience (fewer error messages), we recommend the following:

  • For .NET Framework 3.5 (and earlier) applications: Configure your application to support the .NET Framework 4 or later versions (see instructions).
  • For .NET Framework 4 applications: Install the .NET Framework 4 redistributable package as part of your application setup. See Deployment Guide for Developers.

Controlling the error message

Displaying an error message to communicate that a requested .NET Framework version was not found can be viewed as either a helpful service or a minor annoyance to users. In either case, you can control this UI by passing flags to the activation APIs.

The ICLRMetaHostPolicy::GetRequestedRuntime method accepts a METAHOST_POLICY_FLAGS enumeration member as input. You can include the METAHOST_POLICY_SHOW_ERROR_DIALOG flag to request an error message if the requested version of the CLR is not found. By default, the error message is not displayed. (The ICLRMetaHost::GetRuntime method does not accept this flag, and does not provide any other way to display the error message.)

Windows provides a SetErrorMode function that you can use to declare whether you want error messages to be shown as a result of code that runs within your process. You can specify the SEM_FAILCRITICALERRORS flag to prevent the error message from being displayed.

However, in some scenarios, it is important to override the SEM_FAILCRITICALERRORS setting set by an application process. For example, if you have a native COM component that hosts the CLR and that is hosted in a process where SEM_FAILCRITICALERRORS is set, you may want to override the flag, depending on the impact of displaying error messages within that particular application process. In this case, you can use one of the following flags to override SEM_FAILCRITICALERRORS:

  • Use METAHOST_POLICY_IGNORE_ERROR_MODE with the ICLRMetaHostPolicy::GetRequestedRuntime method.
  • Use RUNTIME_INFO_IGNORE_ERROR_MODE with the GetRequestedRuntimeInfo function.

UI policy for CLR-provided hosts

The CLR includes a set of hosts for a variety of scenarios, and these hosts all display an error message when they encounter problems loading the required version of the runtime. The following table provides a list of hosts and their error message policies.

CLR hostDescriptionError message policyCan error message be disabled?
Managed EXE hostLaunches managed EXEs.Is shown in case of a missing .NET Framework versionNo
Managed COM hostLoads managed COM components into a process.Is shown in case of a missing .NET Framework versionYes, by setting the SEM_FAILCRITICALERRORS flag
ClickOnce hostLaunches ClickOnce applications.Is shown in case of a missing .NET Framework version, starting with the .NET Framework 4.5No
XBAP hostLaunches WPF XBAP applications.Is shown in case of a missing .NET Framework version, starting with the .NET Framework 4.5No

Windows 8 behavior and UI

The CLR activation system provides the same behavior and UI on Windows 8 as it does on other versions of the Windows operating system, except when it encounters issues loading CLR 2.0. Windows 8 includes .NET Framework 4.5, which uses CLR 4.5. However, Windows 8 does not include .NET Framework 2.0, 3.0, or 3.5, which all use CLR 2.0. As a result, applications that depend on CLR 2.0 do not run on Windows 8 by default. Instead, they display the following dialog box to enable users to install .NET Framework 3.5. Users can also enable the .NET Framework 3.5 in Control Panel. Both options are discussed in the article Install the .NET Framework 3.5 on Windows 11, Windows 10, Windows 8.1, and Windows 8.

Новые статьи:  Как поставить кавычки: елочки, „лапки”, ‘марровские’ и компьютерные

Dialog box for 3.5 install on Windows 8

The .NET Framework 4.5 replaces the .NET Framework 4 (CLR 4) on the user’s computer. Therefore, .NET Framework 4 applications run seamlessly, without displaying this dialog box, on Windows 8.

When the .NET Framework 3.5 is installed, users can run applications that depend on .NET Framework 2.0, 3.0, or 3.5 on their Windows 8 computers. They can also run .NET Framework 1.0 and 1.1 applications, provided that those applications are not explicitly configured to run only on the .NET Framework 1.0 or 1.1. See Migrating from the .NET Framework 1.1.

Starting with .NET Framework 4.5, CLR activation logging has been improved to include log entries that record when and why the initialization error message is displayed. For more information, see How to: Debug CLR Activation Issues.

See also

  • Deployment Guide for Developers
  • How to: Configure an app to support .NET Framework 4 or later versions
  • How to: Debug CLR Activation Issues
  • Install the .NET Framework 3.5 on Windows 11, Windows 10, Windows 8.1, and Windows 8

Что делать при ошибке .NET Framework: «Initialization error»

Ошибка Microsoft .NET Framework

Ошибка Microsoft .NET Framework: «Initialization error» связана с невозможностью использовать компонент. Причин этому может быть несколько. Возникает она на этапе запуска игр или программ. Иногда пользователи наблюдают ее при старте Виндовс. Эта ошибка никаким образом не связана с оборудованием или другими программами. Возникает непосредственно в самом компоненте. Давайте рассмотрим подробнее причины ее появления.

Почему возникает ошибка Microsoft .NET Framework: «Initialization error»?

Если вы увидели такое сообщение, например, при старте Windows, это говорит о том, что некоторая программа стоит в автозагрузке и обращается к компоненту Microsoft .NET Framework, а тот в свою очередь выдает ошибку. Тоже самое при запуске определенной игры или программы. Существует несколько причин и вариантов решения проблемы.

Microsoft .NET Framework не установлен

Это особо актуально после переустановки операционной системы. Компонент Microsoft .NET Framework нужен не для всех программ. Поэтому, пользователи зачастую не обращают внимания на его отсутствие. Когда устанавливается новое приложение с поддержкой компонента, возникает следующая ошибка: «Initialization error».

Посмотреть наличие установленного компонента .NET Framework можно в «Панель Управления-Установка и удаление программ».

nalichie-v-sisteme-microsoft-net-framework-dlya-ustraneniya-oshibki-initialization-error

Если ПО действительно отсутствует, просто переходим на официальный сайт и качаем .NET Framework оттуда. Затем устанавливаем компонент как обычную программу. Перегружаем компьютер. Проблема должна исчезнуть.

Установлена не правильная версия компонента

Заглянув в список установленных программ на компьютере, вы обнаружили, что .NET Framework там присутствует, а проблема по прежнему возникает. Скорее всего компонент необходимо обновить до последней версии. Сделать это можно вручную, скачав нужную версию с сайта Microsoft или же с помощью специальных программ.

Маленькая утилита ASoft .NET Version Detector позволяет быстро загрузить необходимую версию компонента Microsoft .NET Framework. Нажимаем на зеленую стрелку напротив интересующей версии и скачиваем ее.

uznat-versiyu-net-framework-s-pomoshhyu-asoft-net-version-detector

Также, с помощью этой программы, можно посмотреть все версии .NET Framework установленные на компьютере.

После обновления, компьютер должен быть перегружен.

Повреждение компонента Microsoft .NET Framework

Последняя причина появления ошибки «Initialization error», может быть связана с повреждением файлов компонента. Это может быть последствием вирусов, неправильной установкой и удалением компонента, очисткой системы различными программами и т.п. В любом случае, Microsoft .NET Framework из компьютера нужно удалить и поставить заново.

Чтобы правильно деинсталлировать Microsoft .NET Framework, используем дополнительные программы, например утилиту .NET Framework Cleanup Tool.

udalenie-microsoft-net-framework-s-pomoshhyu-utilityi-net-framework-cleanup-tool

Затем, с сайта Microsoft качаем нужную версию и устанавливаем компонент. После, еще раз перезапускаем систему.

После проведенных манипуляций ошибка Microsoft .NET Framework: «Initialization error» должна исчезнуть.


Оставьте комментарий