¿Cómo debe diagnosticar el error SEHException-Componente externo ha lanzado una excepción


Cuando un usuario informa de un error como

Sistema.Ejecución.InteropServices.SEHException - ¿El componente externo ha lanzado una excepción?

¿Hay algo que yo como programador pueda hacer para determinar la causa?

Escenario : Un usuario (usando un programa que mi empresa escribió) ha reportado este error. Esto puede o no haber sido un error único. Mencionaron que en el último mes, la computadora ha 'dejado de funcionar' dos veces. He aprendido de experiencia, para no tomar esta descripción demasiado literal, ya que por lo general significa que alguien relacionado con el equipo no está funcionando como se esperaba. No pudieron darme más detalles y no pude encontrar ningún error registrado. Por lo tanto puede o no puede haber sido este error.

Desde el stack-trace, el error real fue al construir una clase que no llama directamente a ningún código de interop, pero quizás complicado por el hecho de que el objeto puede ser parte de una lista que está enlazada a una Red DevExpress.

El error fue 'atrapado' por una rutina de excepción no controlada que normalmente cerrará el programa, pero tiene una opción para ignorar y continuar. Si optaron por ignorar el error, entonces el programa continuó funcionando, pero el error volvió a ocurrir cuando se ejecutó esta rutina. Sin embargo, no volvió a ocurrir después de cerrar y reiniciar nuestra aplicación.

La computadora en cuestión no parecía estar estresada. Está ejecutando Vista Business, tiene 2 GB de memoria y de acuerdo con el Administrador de tareas solo estaba utilizando alrededor de la mitad de eso con nuestra aplicación casi 200Mb.

Hay otra información que puede o no ser relevante. Otra sección del mismo programa utiliza un componente de terceros que es efectivamente un contenedor dotnet alrededor de un dll nativo y este componente tiene un problema conocido donde muy ocasionalmente, se obtiene un

Intentó leer o escribir memoria protegida. Esto es a menudo una indicación de que otra memoria corrupt

Los fabricantes de componentes dicen que esto se ha corregido en la última versión de su componente que estamos utilizando internamente, pero esto no se ha dado al cliente todavía.

Dado que las consecuencias del error son bajas (no se pierde ningún trabajo y reiniciar el programa y volver a donde estaban solo toma un minuto como máximo) y dado que el cliente pronto recibirá una nueva versión (con el componente de terceros actualizado), obviamente puedo cruzar mi dedos y espero que el error no vuelva a ocurrir.

Pero, ¿hay algo más que pueda hacer?

Author: Marcus Mangelsdorf, 2009-08-21

7 answers

Sí. Este error es una excepción estructurada que no se asignó a un error.NET. Es probable que su asignación de cuadrícula de datos arroje una excepción nativa que no fue capturada.

Puede saber qué excepción está ocurriendo mirando la ExternalException.errorCode propiedad. Revisaría tu rastro de pila, y si está ligado a la cuadrícula DevExpress, reportaría el problema a ellos.

 26
Author: Reed Copsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-21 19:49:35

Tuve un problema similar con una SEHException que se lanzó cuando mi programa usó por primera vez un contenedor dll nativo. Resultó que faltaba el DLL nativo para ese envoltorio. La excepción no fue de ninguna manera útil para resolver esto. Lo que ayudó al final fue ejecutar procmon en segundo plano y comprobar si había algún error al cargar todas las DLL necesarias.

 6
Author: Maurice Gilden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-11 08:45:03

Si usted está teniendo un problema como se describe en este post:

Asp.net mvc depurador lanzando SEHException

Entonces la solución es:

Si tiene alguna aplicación de Trusteer (como rapport o cualquier cosa ) simplemente desinstale y reinicie su sistema, funcionará bien ... he encontrado esta solución aquí:

Http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application

 4
Author: Safran Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:53

Los fabricantes de componentes dicen que esto se ha corregido en la última versión de su componente que estamos utilizando internamente, pero esto se ha dado al cliente todavía.

Pregunte al fabricante de componentes cómo probar si el problema que el cliente está recibiendo es el problema que dicen que han solucionado en su última versión, sin/antes de implementar su última versión para el cliente.

 3
Author: ChrisW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-21 19:49:58

Una vieja pregunta, pero para los googlers: Me he encontrado con este error cuando la aplicación reside en un recurso compartido de red, y el dispositivo (portátil, tableta,...) se desconecta de la red, mientras la aplicación está en uso. En mi caso, se debió a que una tableta Surface salió del alcance inalámbrico. No hay problemas después de instalar un WAP mejor.

 1
Author: Conrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-03 21:17:27

Solo otra información... Tenía ese problema hoy en un sistema de Windows 2012 R2 x64 TS donde la aplicación se inició desde una ruta unc / network. El problema ocurrió para una aplicación para todos los usuarios de terminal server. Ejecutar la aplicación localmente funcionó sin problemas. Después de un reinicio, comenzó a funcionar de nuevo: el lanzamiento de SEHException había sido Constructor init y TargetInvocationException

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-23 09:57:05

Configuraciones de mi máquina:

Sistema operativo: Windows 10 Versión 1703 (x64)

Me enfrenté a este error al depurar mi proyecto C#. Net en Visual Studio 2017 Community edition. Estaba llamando a un método nativo realizando p / invoke en un ensamblado de C++ cargado en tiempo de ejecución. Me encontré con el mismo error reportado por OP.

Me di cuenta de que Visual Studio se lanzó con una cuenta de usuario que no era un administrador en la máquina. Entonces me relanzamiento de Visual Studio bajo una cuenta de usuario diferente que era un administrador en la máquina. Eso es todo. Mi problema se resolvió y no me enfrenté al problema de nuevo.

Una cosa a tener en cuenta es que el método que se invocaba en el ensamblado de C++ debía escribir pocas cosas en el registro. No fui a depurar el código C++ para hacer algo de RCA, pero veo la posibilidad de que todo el asunto estaba fallando, ya que se requieren privilegios administrativos para escribir el registro en el sistema operativo Windows 10. Así que antes cuando Visual Studio se estaba ejecutando bajo una cuenta de usuario que no tenía privilegios administrativos en la máquina, entonces las llamadas nativas estaban fallando.

 0
Author: RBT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-21 12:42:29