2009-06-12 16 views
6

Solía ​​ser que si se levantaba una excepción y se propagaba lo suficiente en la pila de llamadas, el lazo principal de la aplicación lo manejaría y le daría un cuadro de diálogo. Ese comportamiento parece estar roto en Windows Vista. Si alguna excepción alcanza ese nivel, Vista interviene y dice que el programa "ha dejado de funcionar", cuando solía ser perfectamente capaz de continuar bajo XP. (¡Esa es la razón por la que el manejador de excepciones en el bucle principal está ahí, por el amor del cielo!)¿Cómo evito que Vista mate mi programa con excepciones?

¿Hay alguna manera de arreglar esto? Preferiblemente en mi propio código y no solo en mi computadora, ¿para que no se estropee en otros sistemas?

+0

mmmm ... usando try..catch bloques y registrar sus errores usando NLog o Log4Net en un archivo de texto ??? – Perpetualcoder

+0

Reemplazar el evento Application.OnException con el suyo no es tan difícil de hacer, además de que también puede registrar la excepción en un archivo en ese punto. –

+0

Sí, pero preferiría no tener que configurarlo cada vez que hackeo alguna pequeña herramienta para uso personal. –

Respuesta

11

Asegúrese de que la variable global en Sistema, JITEnable aún esté configurada en 0. Si esa variable se establece en 1, las excepciones de hardware (y externas) causarán ese comportamiento llamando a UnhandledExceptionFilter. Si está configurado en 2, , cualquier excepción lo causará.

+0

Gracias! Eso funciono. –

+1

@Mason: ¿Cómo se configuró JITEnable en primer lugar? Pensé que estaba predeterminado en 0. –

1

Debe agregar un controlador de excepción de nivel de aplicación, http://www.chami.com/tips/delphi/011497D.html. También debe considerar la ejecución de madexcept para determinar por qué están ocurriendo estas excepciones, para que puedan corregirse.

+1

+1 para MadExcept. Producto increíble, absolutamente increíble. –

0

Desafortunadamente, no todas las excepciones fueron atrapadas, incluso en XP. ¿Alguna vez se ha desvanecido una aplicación, simplemente colgando y necesitando un pskill? (Alguna versión de Delphi, ¿alguien?)
Intentaré conectar EurekaLog en tu aplicación y ver si proporciona algo de información sobre lo que sucede.

Cuestiones relacionadas