如何防止Vista在例外情况下杀死我的程序?

时间:2009-06-12 19:54:56

标签: delphi exception-handling windows-vista

过去,如果异常被引发并在调用堆栈中传播得足够远,Application的主循环将处理它并为您提供一个对话框。在Windows Vista下,这种行为似乎被打破了。如果任何异常达到该级别,Vista会介入,并表示该程序“已停止工作”,此时它曾完全能够在XP下继续运行。 (这就是为了天堂的缘故,主循环中的异常处理程序存在的全部原因!)

有什么方法可以解决这个问题吗?最好是在我的代码本身而不仅仅是在我的计算机上,所以它不会搞砸其他系统?

3 个答案:

答案 0 :(得分:11)

检查以确保System,JITEnable中的全局变量仍设置为0.如果该变量设置为1,则硬件(和外部)异常将通过调用UnhandledExceptionFilter导致该行为。如果设置为2,任何异常都会导致它。

答案 1 :(得分:1)

您应该添加应用程序级异常处理程序http://www.chami.com/tips/delphi/011497D.html。此外,您应该查看运行madexcept以确定为什么会发生这些异常,因此可以修复它们。

答案 2 :(得分:0)

不幸的是,即使在XP中,并非所有异常都被很好地捕获。曾经有一个应用程序只是消失,不只是悬挂,需要一个pskill? (有些德尔福版有人吗?)
我会尝试在您的应用程序中插入EurekaLog,看看它是否提供了有关发生的事情的信息。