ошибки инициализации платформа .NET Framework: управление взаимодействием с пользователем
Примечание.
Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
Система активации среды 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. Например, можно использовать флаг 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 | Description | Политика сообщения об ошибках | Можно ли отключить сообщение об ошибке? |
---|---|---|---|
Узел управляемых EXE-файлов | Запускает управляемые EXE-файлы. | Отображается в случае отсутствия версии платформы .NET Framework | No |
Узел управляемого COM | Загружает управляемые компоненты COM в процесс. | Отображается в случае отсутствия версии платформы .NET Framework | Да, установив флаг SEM_FAILCRITICALERRORS |
Узел ClickOnce | Запускает приложения ClickOnce. | Отображается в случае отсутствия версии платформы .NET Framework начиная с .NET Framework 4.5 | No |
Узел XBAP | Запускает приложения WPF XBAP. | Отображается в случае отсутствия версии платформы .NET Framework начиная с .NET Framework 4.5 | No |
Поведение и пользовательский интерфейс 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.
Примечание.
.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