¿Qué podría hacer que una aplicación .NET WinForms se cierre repentinamente sin un diálogo?

Se ha informado que nuestra aplicación WinForms ocasionalmente se cierra sola. No muestra nuestro propio cuadro de diálogo de error de envío ni diálogo de envío de error de Windows, simplemente se cierra y se va, a menudo cuando la persona estaba afk y no hacía nada con la aplicación. Parece ser una ocurrencia semi-rara, tal vez como 2-3 veces al mes, y le ha sucedido a más de una persona. No tengo idea de por dónde empezar con la obtención de un caso de reprografía o dónde comenzar a rastrearlo.

DO# .NET 2.0 Los casos reportados están en Win XP

¿Alguien tiene alguna idea?

3

3 Respuestas

Los desbordamientos de pila debido a la recursión infinita son una gran causa de que las aplicaciones salgan sin previo aviso. A menos que haya hecho algo deliberadamente para provocar una salida silenciosa, las excepciones no controladas (que no sean el desbordamiento de la pila) normalmente mostrarán algún tipo de interfaz de usuario antes de que la aplicación se cierre. El desbordamiento de la pila es la excepción más común (perdón, perdón) a esta regla.

Por supuesto, desde un código no administrado o inseguro, es casi seguro que puede alterar el tiempo de ejecución de la manera correcta para provocar una salida silenciosa.

Las sugerencias sobre la instrumentación y mirando el registro de eventos de Windows también son buenas.

4
agregado
Parece que lo más probable es que un accidente silencioso sea el culpable. Gracias
agregado el autor Davy8, fuente

Las excepciones harán que una aplicación "desaparezca". Verifique los registros de eventos para ver si hay algo allí.

Verifique el administrador de tareas para ver si el proceso aún está presente cuando la ventana desaparece. He tenido un bloqueo del explorador y no he podido volver a dibujar la ventana hasta que haya sido Alt-Tabbed o Switched-To (desde el administrador de tareas).

No deje pasar a los usuarios para olvidar convenientemente que están cerrando la aplicación. Es posible que desee colocar alguna lógica de registro en la aplicación para registrar los cierres iniciados por el usuario. La próxima vez que "desaparece" puede verificar si hay entradas de registro.

3
agregado
La aplicación todavía no está en "la naturaleza", así que conozco a estos usuarios lo suficientemente bien como para confiar en que ellos mismos no cerraron la aplicación (sucede con demasiada frecuencia como para olvidarse fácilmente).
agregado el autor Davy8, fuente
Además, la aplicación no crea una nueva instancia si ya hay otro proceso, y pudieron reabrir la aplicación, por lo que se bloqueó de forma silenciosa, pero en general esas son cosas buenas para verificar.
agregado el autor Davy8, fuente

Podría agregar algo de lógica en el evento FormClosing para preguntar al usuario si eso es lo que realmente quiere hacer, luego puede cancelar el evento de cierre y su aplicación continuará ejecutándose si todo está bien. Si sigue notando este problema y nunca lleva a cabo su lógica, tendrá que ensuciarse las manos en el depurador.

0
agregado