Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Эта статья связана с .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 | Описание | Политика сообщений об ошибке | Можно ли отключить сообщение об ошибке? |
|---|---|---|---|
| Управляемый хост 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. | нет |
Поведение и пользовательский интерфейс 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".