Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.
El sistema de activación de Common Language Runtime (CLR) determina la versión de CLR que se usará para ejecutar código de aplicación administrada. En algunos casos, es posible que el sistema de activación no pueda encontrar una versión de CLR que se va a cargar. Esta situación suele producirse cuando una aplicación requiere una versión clR que no es válida o no está instalada en un equipo determinado. Si no se encuentra la versión solicitada, el sistema de activación clR devuelve un código de error HRESULT de la función o interfaz a la que se llamó y puede mostrar un mensaje de error al usuario que ejecuta la aplicación. En este artículo se proporciona una lista de códigos HRESULT y se explica cómo puede evitar que se muestre el mensaje de error.
CLR proporciona infraestructura de registro para ayudarle a depurar problemas de activación de CLR, como se describe en Cómo: Depurar problemas de activación de CLR. Esta infraestructura no debe confundirse con los registros de enlace de ensamblados, que son completamente diferentes.
Códigos HRESULT de activación de CLR
Las API de activación de CLR devuelven códigos HRESULT para notificar el resultado de una operación de activación a un host. Los hosts CLR siempre deben consultar estos valores devueltos antes de continuar con operaciones adicionales.
CLR_E_SHIM_RUNTIMELOAD
CLR_E_SHIM_RUNTIMEEXPORT
CLR_E_SHIM_INSTALLROOT
CLR_E_SHIM_INSTALLCOMP
CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND
CLR_E_SHIM_SHUTDOWNINPROGRESS
Interfaz de usuario para errores de inicialización
Si el sistema de activación clR no puede cargar la versión correcta del tiempo de ejecución que requiere una aplicación, muestra un mensaje de error a los usuarios para informarles de que su equipo no está configurado correctamente para ejecutar la aplicación y les proporciona la oportunidad de solucionar la situación. El siguiente mensaje de error se presenta normalmente en esta situación. El usuario puede elegir Sí para ir a un sitio web de Microsoft donde puede descargar la versión correcta de .NET Framework para la aplicación.
Resolución del error de inicialización
Como desarrollador, tiene una variedad de opciones para controlar el mensaje de error de inicialización de .NET Framework. Por ejemplo, puede usar una marca de API para evitar que se muestre el mensaje, como se describe en la sección siguiente. Sin embargo, todavía tiene que resolver el problema que impedía que la aplicación cargase el tiempo de ejecución solicitado. De lo contrario, es posible que la aplicación no se ejecute en absoluto o que alguna funcionalidad no esté disponible.
Para resolver los problemas subyacentes y proporcionar la mejor experiencia de usuario (menos mensajes de error), se recomienda lo siguiente:
Para las aplicaciones de .NET Framework 3.5 (y anteriores): configure la aplicación para admitir .NET Framework 4 o versiones posteriores (consulte las instrucciones).
Para las aplicaciones de .NET Framework 4: instale el paquete redistribuible de .NET Framework 4 como parte de la configuración de la aplicación. Consulte Guía de implementación para desarrolladores.
Control del mensaje de error
Mostrar un mensaje de error para comunicar que no se encontró una versión solicitada de .NET Framework se puede ver como un servicio útil o una molestia secundaria a los usuarios. En cualquier caso, puede controlar esta interfaz de usuario pasando marcas a las API de activación.
El método ICLRMetaHostPolicy::GetRequestedRuntime acepta un miembro de enumeración METAHOST_POLICY_FLAGS como entrada. Puede incluir la marca METAHOST_POLICY_SHOW_ERROR_DIALOG para solicitar un mensaje de error si no se encuentra la versión solicitada de CLR. De forma predeterminada, no se muestra el mensaje de error. (El método ICLRMetaHost::GetRuntime no acepta esta marca y no proporciona ninguna otra manera de mostrar el mensaje de error).
Windows proporciona una función SetErrorMode que puedes usar para declarar si quieres que se muestren mensajes de error como resultado del código que se ejecuta dentro del proceso. Puede especificar la marca SEM_FAILCRITICALERRORS para evitar que se muestre el mensaje de error.
Sin embargo, en algunos escenarios, es importante invalidar la configuración de SEM_FAILCRITICALERRORS establecida por un proceso de aplicación. Por ejemplo, si tiene un componente COM nativo que hospeda CLR y que se hospeda en un proceso en el que se establece SEM_FAILCRITICALERRORS, es posible que desee invalidar la marca, en función del impacto de mostrar mensajes de error dentro de ese proceso de aplicación concreto. En este caso, puede usar una de las marcas siguientes para invalidar SEM_FAILCRITICALERRORS:
Use METAHOST_POLICY_IGNORE_ERROR_MODE con el método ICLRMetaHostPolicy::GetRequestedRuntime .
Use RUNTIME_INFO_IGNORE_ERROR_MODE con la función GetRequestedRuntimeInfo .
Directiva de interfaz de usuario para hosts proporcionados por CLR
CLR incluye un conjunto de hosts para una variedad de escenarios, y todos estos hosts muestran un mensaje de error cuando se producen problemas al cargar la versión necesaria del tiempo de ejecución. En la tabla siguiente se proporciona una lista de hosts y sus directivas de mensajes de error.
| Host CLR | Descripción | Directiva de mensaje de error | ¿Se puede deshabilitar el mensaje de error? |
|---|---|---|---|
| Host EXE administrado | Inicia exes administrados. | Se muestra en caso de que falte una versión de .NET Framework. | No |
| Host COM administrado | Carga los componentes COM administrados en un proceso. | Se muestra en caso de que falte una versión de .NET Framework. | Sí, estableciendo la marca de SEM_FAILCRITICALERRORS |
| Host ClickOnce | Inicia aplicaciones ClickOnce. | Se muestra en caso de que falte una versión de .NET Framework, a partir de .NET Framework 4.5. | No |
| Host XBAP | Inicia aplicaciones XBAP de WPF. | Se muestra en caso de que falte una versión de .NET Framework, a partir de .NET Framework 4.5. | No |
Comportamiento y interfaz de usuario de Windows 8
El sistema de activación CLR proporciona el mismo comportamiento y interfaz de usuario en Windows 8 que en otras versiones del sistema operativo Windows, excepto cuando encuentra problemas al cargar CLR 2.0. Windows 8 incluye .NET Framework 4.5, que usa CLR 4.5. Sin embargo, Windows 8 no incluye .NET Framework 2.0, 3.0 o 3.5, que usan CLR 2.0. Como resultado, las aplicaciones que dependen de CLR 2.0 no se ejecutan en Windows 8 de forma predeterminada. En su lugar, muestran el siguiente cuadro de diálogo para permitir que los usuarios instalen .NET Framework 3.5. Los usuarios también pueden habilitar .NET Framework 3.5 en el Panel de control. Ambas opciones se describen en el artículo Instalación de .NET Framework 3.5 en Windows 11, Windows 10, Windows 8.1 y Windows 8.
Nota:
.NET Framework 4.5 reemplaza .NET Framework 4 (CLR 4) en el equipo del usuario. Por lo tanto, las aplicaciones de .NET Framework 4 se ejecutan sin problemas, sin mostrar este cuadro de diálogo, en Windows 8.
Cuando se instala .NET Framework 3.5, los usuarios pueden ejecutar aplicaciones que dependen de .NET Framework 2.0, 3.0 o 3.5 en sus equipos Con Windows 8. También pueden ejecutar aplicaciones de .NET Framework 1.0 y 1.1, siempre que esas aplicaciones no estén configuradas explícitamente para ejecutarse solo en .NET Framework 1.0 o 1.1. Consulte Migración desde .NET Framework 1.1.
A partir de .NET Framework 4.5, se ha mejorado el registro de activación de CLR para incluir entradas de registro que registran cuándo y por qué se muestra el mensaje de error de inicialización. Para obtener más información, vea Cómo: Depurar problemas de activación de CLR.