【问题标题】:OpenFileDialog crashes under Windows XP, but not Windows 7OpenFileDialog 在 Windows XP 下崩溃,但在 Windows 7 下不崩溃
【发布时间】:2011-08-05 18:28:12
【问题描述】:

我遇到了一个从未见过的奇怪问题。我可以在 Windows 7 中打开OpenFileDialog 没有任何问题。但是,当我在 Windows XP 上尝试我的应用程序时,调用 OpenFileDialog.ShowDialog() 会立即使应用程序崩溃。它只是消失了!从调试器运行时,我没有收到任何未处理的异常。如果我将代码包装在 try/catch 块中,则不会捕获任何内容。我还在 Debug -> Exceptions 中检查了所有抛出的异常,但没有弹出任何内容。我会在下面的答案中尝试其他一些建议,然后再报告。

有谁知道如何解决这个问题?我找到了post about something similar,但这是相反的问题。我会尝试调整桌面设置,看看是否与此相关,但我很怀疑。

编辑——作为健全性检查,我编写了一个测试 WPF 应用程序,它直接通过主窗口显示 OpenFileDialog 以及另一个可以由主窗口显示的 Window。它在 Windows XP 下完全可以正常工作。所以现在我真的很困惑。我已经证实我没有做一些愚蠢的事情,比如试图从工作线程中显示对话框。 OpenFileDialog 会短暂显示,然后随应用程序一起消失。

编辑——我将尝试在另一台 XP 计算机上重现此问题。现在,我将尝试 Windows XP 模式,看看会发生什么。

【问题讨论】:

  • 将我自己的问题标记为stackoverflow.com/questions/3550030/…的可能重复项
  • 也许毕竟不是重复的。我检查了 XP 计算机,它安装了几乎所有的 .NET Framework 版本。

标签: wpf visual-studio-2010 .net-4.0 crash openfiledialog


【解决方案1】:

当我打开 OpenFileDialog 时 DLL 崩溃时,我遇到了类似的错误。原来 OpenFileDialog 改变了工作目录,所以我的 dll 试图写入一个不存在的相对文件。

【讨论】:

    【解决方案2】:

    您是否在输出中看到任何“第一次机会”异常?事件日志中有任何条目吗? XP 机器上是否存在您使用的默认路径?

    尝试将处理程序添加到应用程序域的UnhandledException

    当您使用未经任何调整的全新库存FileOpenDialog 时,是否也会发生同样的情况?如果一个全新的应用程序只显示一个文件打开对话框,那又如何呢?

    【讨论】:

    • 啊,我看看默认路径——好建议!
    • 验证它存在——仍然崩溃。
    • 一个全新的winforms应用怎么样?对话从那里工作吗?然后我们可以识别应用程序问题/环境问题
    • 我刚刚添加了更多细节来做我原来的问题。我创建了一个新的 WPF 应用程序,它工作正常。所以现在的问题是,为什么我的真实应用程序可以在 Win7 而不是 XP 上运行?非常非常莫名其妙的问题……
    • 下一步缩小范围,尝试在您的应用中打开一个对话框,使用所有默认设置(无自定义)。假设失败,请考虑打开 .Net 框架调试 - 您还需要为 .Net 框架启用符号下载 - 全部在设置调试 IIRC 中。这将允许您进入框架代码并尝试调试问题。顺便说一句,您是使用反射还是 IoC 容器来创建混凝土?
    【解决方案3】:

    Galet's post


    我无法告诉您到底是什么问题,但您可以通过以下方式了解到底发生了什么。我假设您使用的是 VS2008 或 2005。

    1.切换到释放模式 2.转到 Debug\Exceptions,并标记所有“抛出”异常,如下所示:http://vvcap.net/db/JbWS_tzy2IpBoI7R7amm.htp 3.在调试器中运行可执行文件,忽略来自VS的警告,即没有调试信息 似乎在执行过程中的某个时间抛出了一个 win32 异常,但是这样或那样,您会从调试器中收到一条或多条消息,解释发生了什么类型的异常以及发生在哪里。在大多数情况下,这些消息可以很清楚到底出了什么问题

    编辑:我忘记提到的一件事是非托管调试也必须打开,例如此处(当您直接从 IDE 启动程序时)或此处(当您附加到正在运行的进程时) link|edit|flag 于 2009 年 4 月 12 日 22:32 编辑

    于 2009 年 4 月 10 日 19:01 回答 加莱特 1,2201924

    【讨论】:

    • 我应该在我的帖子中提到它,但我确实标记了所有抛出的异常——没有弹出任何东西。我在 VS2010 中,我编辑了我的标签以反映这一点。
    • 我启用了非托管调试,并检查了 Throw 列中的所有内容。它仍然在消失,没有任何信息。
    猜你喜欢
    • 2023-03-18
    • 2012-07-17
    • 2011-03-21
    • 2014-06-07
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    相关资源
    最近更新 更多