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的问题吗?
TaskDialog 引发异常:需要版本 6 中的 comctl32.dll
C#SHDocVw.IWebBrowser2.Navigate / COMException(0x800700AA)