我有一个WPF应用程序(.net 4.0),它在Windows 7系统上运行良好。但是当我尝试运行应用程序Windows 8.1时它工作正常15到20分钟,但在那之后突然出现一条弹出消息,如
问题导致程序无法正常工作。如果解决方案可用,Windows将关闭程序并通知您
弹出消息显示有两个选项Debug和close program。当我按下调试时,它显示消息为检测到FatalExecutionEngineError
运行时遇到了致命错误。在线程0x23624上,错误的地址为0x713543ed。错误代码是0xc0000005。此错误可能是CLR中的错误,也可能是用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括COM-interop或PInvoke的用户封送错误,这可能会破坏堆栈。
如果我按继续进一步显示消息
未处理的类型' System.ExecutionEngineException'发生在PresentationFramework.dll
但我没有弄清楚它失败的原因以及导致问题的部分代码?
通过网络搜索后,我尝试了以下
添加了DispatcherUnhandledException处理程序和App域Unhandled异常处理程序,并添加了legacyUnhandledExceptionPolicy。但是,对于我仍然面临Windows 8.1崩溃的任何事情都没有用。
有人能指出我如何检测导致崩溃的代码部分吗?以及如何处理FatalExecutionEngineEror异常?
修改
CLR版本在Windows 7和8.1中使用的是4.0.30319
答案 0 :(得分:0)
由于问题与引起异常的原因有关,所以我可以展示我的步骤以使用WPF应用程序(使用WebBrowser控件和COM互操作)来确定问题。首先,在Debugging-General-Just My Code中禁用 Just My Code选项。然后运行失败的代码,并在“调用堆栈”窗口中检查哪种方法导致崩溃。 之后,请查看.NET source处的方法实现。在我的情况下,Invariant.Assert
调用(源为here)抛出ExecutionEngineException并终止了进程。现在,此异常已过时,而使用了Environment.FailFast方法。根据MSDN
此方法可终止进程,而无需运行任何活动的try / finally块或终结器。
因此,您无法正确处理它,只有Windows应用程序事件日志可以提供帮助