ole32.dll 异常后的 iWebBrowser::Navigate 死锁

Posted

技术标签:

【中文标题】ole32.dll 异常后的 iWebBrowser::Navigate 死锁【英文标题】:iWebBrowser::Navigate Deadlock after a ole32.dll exception 【发布时间】:2016-07-01 13:51:26 【问题描述】:

我有一个关于 Windows 嵌入式浏览器和 COM 的问题。我想要做的是在 html 表单中向用户显示一些数据,所以我使用 iwebbrowser2 控件来实现这一点。

ole32.dll 崩溃后调用iwebbrowser2 Navigate 后,我的应用程序出现了这种奇怪的死锁或挂起。这个 ole32 崩溃随机发生在我的应用程序中。异常发生的地点或时间并不常见。它可能在应用程序执行开始时或稍后在使用应用程序时发生。 o 工作的应用程序有几个正在运行的线程和一些突然产生的 Windows 工作线程。有一个名为 WrapperThreadProc 的特定线程,我不确定它在做什么,但它在可能不再存在的 COM 对象上调用 CoUninitialize,这可能导致 ole32.dll 上的异常(不确定这是否正在发生)。

这是异常发生时调用堆栈的图片

这是在navigate() 之后发生死锁时调用堆栈的图片

有人知道这个有线问题是怎么回事吗?我非常感谢任何小小的帮助。

谢谢

【问题讨论】:

截图不可读,无用。始终将调用堆栈作为文本发布,并提供minimal reproducible example。根据您提供的信息,我们只能建议您修复错误。 感谢 cmets。下次我提出问题时,我会记住所有建议。话虽如此,我已经找到了解决问题的方法。事实证明,networkitemfactory.dll 中发生了争用情况,Microsoft 为其发布了修补程序。这是support.microsoft.com/en-us/kb/2494427的文章。 【参考方案1】:

我已经找到了问题的解决方案。事实证明,networkitemfactory.dll 中发生了争用情况,这会导致 ole32.dll 崩溃和卸载。如果在“iwebbrowser2::navigate”之类的异常之后进行任何 COM 调用,则应用程序将陷入死锁。微软为它发布了一个修补程序。这是文章 support.microsoft.com/en-us/kb/2494427

【讨论】:

以上是关于ole32.dll 异常后的 iWebBrowser::Navigate 死锁的主要内容,如果未能解决你的问题,请参考以下文章

java运行闪退,报错如下,是因为ole32.dll的问题吗?

奇怪的链接警告-ole32.lib

TaskDialog 引发异常:需要版本 6 中的 comctl32.dll

C#SHDocVw.IWebBrowser2.Navigate / COMException(0x800700AA)

仅在类库输出类型中未找到 Microsoft.WITDataStore32.dll 异常

使用托管 C++ 库时出现 WS2_32.dll_unloaded 异常