所以这是一个奇怪的错误。在我们的一位客户 (Windows XP SP3) 的一台机器上,我们的程序在尝试通过 ShowDialog() 打开过滤器对话框时崩溃。
会发生什么:用户按预期工作,他/她没有做任何不正常或错误的事情,并且他/她所做的一切都在几台机器上进行了测试(范围从 Win XP 32 位到 Win 7 64 位)。
现在,过了一段时间,他/她想要使用过滤器对话框(他/她当时做了十几次)并且应用程序崩溃了。您会从 Windows XP 中收到精彩的“$applicationname 导致问题并必须终止”消息,在它下方您可以看到过滤器对话框,部分构建(意思是:您可以看到窗口、滚动条和透明的“洞”,其中文本控件/标签应该是。
在 Windows 事件查看器中,您可以看到这样的条目
事件 ID:1000 源:.NET 运行时 4.0 错误重新(也许这背后有什么东西,它说“报告”?!)
错误应用程序 $applicationname.exe,版本 $versionnumber,标记 $someRandomNumbers,错误模块 ntdll.dll,版本 5.1.2600.6055,标记 4d00f27b,调试?0,错误地址 0x00446da
现在,让我感到奇怪的是:通过 ShowDialog 打开对话框的位置嵌入在 2(!) try...catch 块中。应用程序如何崩溃?甚至没有关于这次崩溃的日志文件条目(我们在该程序中的每个 catch 块中都完成了一些事情,并且它始终是我们做的第一件事)。
我已经从那台机器上卸载了应用程序和 .NET 4,再次重新启动安装了所有内容,安装了 Windows 更新并再次重新启动。结果相同。
*edit 刚刚注意到一些事情:当我关闭来自 microsoft 的消息时,会在 eventviewer 中创建一个附加条目:
由于未处理的异常,该过程被终止我猜这就是英语的意思,因为原始消息是我必须翻译的另一种语言
异常代码:c015000f,地址 7c9546DA地址始终相同