iWebBrowser::Navigate ole32.dll 异常后的死锁
iWebBrowser::Navigate Deadlock after a ole32.dll exception
我有一个与 windows 嵌入式浏览器和 COM 有关的问题。我想要做的是以 HTML 形式向用户显示一些数据,因此我使用 iwebbrowser2
控件来实现此目的。
在 ole32.dll
崩溃后调用 iwebbrowser2 Navigate
后,我的应用程序出现了这种奇怪的死锁或挂起。这个 ole32 崩溃随机发生在我的应用程序中。不存在异常发生的通常地点或时间。它可能在应用程序执行开始时发生,也可能在稍后使用应用程序时发生。 o 工作的应用程序有几个线程 运行 和一些 windows 工作线程,这些线程不知从哪里冒出来。有一个名为 WrapperThreadProc
的特定线程,我不确定它在做什么,但它在可能不再存在的 COM 对象上调用 CoUninitialize
可能导致 [=14= 上的异常](不确定这是否真的发生了)。
这里是异常发生时调用栈的图片
这里是 navigate()
之后发生死锁时调用堆栈的图片
有人知道这个有线问题是怎么回事吗?我非常感谢任何小小的帮助。
谢谢
我找到了解决问题的方法。事实证明,networkitemfactory.dll 中发生了竞争条件,这会导致 ole32.dll 崩溃和卸载。如果在 "iwebbrowser2::navigate" 之类的异常之后进行任何 COM 调用,那么应用程序将陷入死锁。微软为此发布了一个修补程序。这是文章 support.microsoft.com/en-us/kb/2494427
我有一个与 windows 嵌入式浏览器和 COM 有关的问题。我想要做的是以 HTML 形式向用户显示一些数据,因此我使用 iwebbrowser2
控件来实现此目的。
在 ole32.dll
崩溃后调用 iwebbrowser2 Navigate
后,我的应用程序出现了这种奇怪的死锁或挂起。这个 ole32 崩溃随机发生在我的应用程序中。不存在异常发生的通常地点或时间。它可能在应用程序执行开始时发生,也可能在稍后使用应用程序时发生。 o 工作的应用程序有几个线程 运行 和一些 windows 工作线程,这些线程不知从哪里冒出来。有一个名为 WrapperThreadProc
的特定线程,我不确定它在做什么,但它在可能不再存在的 COM 对象上调用 CoUninitialize
可能导致 [=14= 上的异常](不确定这是否真的发生了)。
这里是异常发生时调用栈的图片
这里是 navigate()
之后发生死锁时调用堆栈的图片
有人知道这个有线问题是怎么回事吗?我非常感谢任何小小的帮助。
谢谢
我找到了解决问题的方法。事实证明,networkitemfactory.dll 中发生了竞争条件,这会导致 ole32.dll 崩溃和卸载。如果在 "iwebbrowser2::navigate" 之类的异常之后进行任何 COM 调用,那么应用程序将陷入死锁。微软为此发布了一个修补程序。这是文章 support.microsoft.com/en-us/kb/2494427