Fallo en ReportViewer hace que se cierre la aplicación

JR Arroyo 20 Puntos de reputación
2023-11-27T11:36:14.5733333+00:00

Hola!

tengo una aplicación Windows Forms que lleva funcionando perfectamente años y, de repente, ha empezado a dar un extraño fallo que provoca el cierre de la aplicación. Ha ido ocurriendo poco a poco en cada ordenador de los usuarios (un total de 5) sin motivo aparente, excepto en uno en el que aún funciona.

Pudimos comprobar que en uno de los ordenadores empezó a fallar tras instalar las actualizaciones de Windows KB5031356 y KB5031224, pero al compararlo con el que sí funciona vimos que ambos tienen las misma actualizaciones. También revisamos dll's y todo parece correcto.

Lo siguiente que hicimos fue intentar hacer un debug de la aplicación y ocurren dos cosas muy llamativas:

  • Si lo hago paso a paso por instrucciones: se muestra el formulario con sus datos, aunque un poco descolocado, pero se muestra y no da error.
  • Si dejo correr el programa: obtengo este error: Asistente para la depuración administrada 'FatalExecutionEngineError': 'El runtime detectó un error irrecuperable. La dirección del error fue 0xe6537167, en el subproceso 0x4148. El código de error es 0xc0000005. Es posible que este error sea un error de CLR o de partes no seguras y no verificables de código de usuario. Entre los orígenes más habituales de este error se encuentran los errores de cálculo de referencias para la interoperabilidad COM o PInvoke, que pueden dañar la pila.'

Al ver esto también probamos a meter un delay en el código por si fuera un tema de velocidad, pero tampoco funcionó :(

De verdad que cualquier ayuda sobre esto será muy bienvenida, porque ya no sabemos por dónde tirar ;)

ASP.NET
ASP.NET
Conjunto de tecnologías de .NET Framework para la creación de aplicaciones y servicios web XML.
46 preguntas
0 comentarios No hay comentarios
{count} votos

1 respuesta

Ordenar por: Muy útil
  1. Carlos Solís Salazar 18,051 Puntos de reputación MVP
    2023-11-27T17:24:40.8866667+00:00

    El error FatalExecutionEngineError que estás experimentando en tu aplicación Windows Forms es particularmente difícil de diagnosticar porque puede ser causado por una amplia gama de problemas, desde errores en el código hasta problemas de compatibilidad con el sistema operativo. Aquí te dejo algunas sugerencias sobre cómo abordar este problema:

    1. Revisión del Código para Interoperabilidad COM o PInvoke: Dado que el error menciona posibles problemas con la interoperabilidad COM o PInvoke, sería prudente revisar cualquier código que utilice estas tecnologías. Busca si hay alguna actualización o cambio en las DLLs o componentes COM que tu aplicación utiliza.
    2. Pruebas en Diferentes Entornos: Dado que el error no ocurre en todos los sistemas, sería útil probar la aplicación en diferentes configuraciones de hardware y versiones de Windows. Esto podría ayudar a identificar si el problema está relacionado con una actualización específica de Windows o con la configuración del hardware.
    3. Análisis de Logs y Eventos del Sistema: Revisa los registros de eventos de Windows en las máquinas donde falla la aplicación. Esto puede proporcionar pistas sobre conflictos de software o hardware que podrían estar causando el problema.
    4. Actualización de .NET Framework: Asegúrate de que todos los sistemas estén usando la misma versión de .NET Framework y que esté actualizada. A veces, las actualizaciones de .NET Framework pueden introducir cambios que afectan la manera en que las aplicaciones antiguas se ejecutan.
    5. Depuración con Herramientas Avanzadas: Considera usar herramientas de depuración más avanzadas como WinDbg o Visual Studio Debugger en modo avanzado para obtener más información sobre el error. Estas herramientas pueden proporcionar información más detallada sobre lo que sucede en el momento del fallo.
    6. Revisar Cambios Recientes en el Código: Si el problema comenzó a aparecer recientemente, revisa cualquier cambio reciente en el código de la aplicación. A veces, incluso pequeñas modificaciones pueden introducir problemas inesperados.
    7. Perfilado de Memoria: Utiliza un perfilador de memoria para verificar si hay fugas de memoria o problemas relacionados con la gestión de memoria. Estos problemas a veces pueden causar errores graves en la ejecución de la aplicación.

    Este tipo de errores son complicados y pueden requerir un proceso de diagnóstico exhaustivo. Espero que estas sugerencias te ayuden a encontrar una solución. Si tienes más detalles o preguntas específicas, estaré encantado de ayudarte.

    1 persona ha encontrado útil esta respuesta.

Su respuesta

Las respuestas se pueden marcar como respuestas aceptadas por el autor de la pregunta, lo que ayuda a los usuarios a conocer la respuesta que resolvió el problema del autor.