【问题标题】:Application sometimes crashes when opening a dialog on only one machine仅在一台机器上打开对话框时,应用程序有时会崩溃
【发布时间】:2012-06-27 08:34:22
【问题描述】:

所以这是一个奇怪的错误。在我们的一位客户(Windows XP SP3)的一台机器上,我们的程序在尝试通过 ShowDialog() 打开过滤器对话框时崩溃。

会发生什么:用户按预期工作,他/她没有做任何不正常或错误的事情,并且他/她所做的一切都在多台机器上进行了测试(范围从 Win XP 32 位到 Win 7 64 位)。

现在,过了一段时间,他/她想要使用过滤器对话框(他/她当时做了十几次)并且应用程序崩溃了。您会从 Windows XP 中收到精彩的“$applicationname 导致问题并必须终止”消息,在它下方您可以看到过滤器对话框,部分构建(意思是:您可以看到窗口、滚动条和透明的“洞”,其中文本控件/标签应该是。

在 Windows 事件查看器中,您可以看到这样的条目

事件 ID:1000 来源:.NET Runtime 4.0 Error Re (也许这背后有什么东西,上面写着“报告”?!)

错误应用程序 $applicationname.exe,版本 $versionnumber, 戳 $someRandomNumbers,错误模块 ntdll.dll,版本 5.1.2600.6055,戳4d00f27b,debug?0,故障地址0x00446da

现在,让我感到奇怪的是:通过 ShowDialog 打开对话框的位置嵌入在 2(!) try...catch 块中。应用程序如何崩溃?甚至没有关于这次崩溃的日志文件条目(我们在该程序中的每个 catch 块中都完成了一些事情,并且它始终是我们做的第一件事)。

我已经从那台机器上卸载了应用程序和 .NET 4,重新启动安装了所有东西,安装了 Windows 更新并再次重新启动。结果一样。

*编辑 刚刚注意到一些事情:当我关闭来自 microsoft 的消息时,会在 eventviewer 中创建一个附加条目:

进程因未处理的异常而终止我猜这就是英文的意思,因为原始消息是我必须翻译的另一种语言

异常代码:c015000f,地址 7c9546DA 地址始终相同

【问题讨论】:

  • 谷歌搜索“.net c015000f”给了我几个热修复和博客文章来看看..我建议你看看那些..
  • 这个异常是由一个编程错误引起的,De/ActivateActCtx winapi函数使用不正确。它与显示对话框相关联,因为这些功能通常用于启用视觉样式。这就是从提供的信息中可以猜到的所有内容。
  • @riffnl 嗯,快速浏览了一下(我使用的搜索词略有不同,但结果基本相同),这些几乎都与在 64 位 Windows (WoW) 上运行 32 位应用程序有关这里没有发生。
  • @Hans 听起来很有趣。我的一位同事认为这可能是由于视频 RAM 不足造成的,因此我们停用了视觉样式,之后错误数量减少,并且在关闭过滤器对话框时出现错误,(我猜)它与您的信息

标签: c# .net windows-xp


【解决方案1】:

正如@Hans 所说,这是由于不正确使用 De/ActivateActCtx winapi 函数造成的。

我在编写 VB 应用程序时遇到了同样的问题。使用我的 ActiveX 控件(MFC)。我在控件类定义中放置了一个对话框变体。 如下:

CMyDlg dlg;

所以对话框何时初始化不在我的控制范围内。这和你有同样的问题。当应该显示控件时,就会出现错误。

【讨论】:

    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多