C#WebBrowser控制系统.AccessViolationException

C#WebBrowser控制系统.AccessViolationException,c#,.net,exception,browser,C#,.net,Exception,Browser,我有一个使用内置webbrowser控件的程序。在使用过程中的某个时刻,我不确定在什么时候,但它似乎是随机的,我得到以下错误: System.AccessViolationException FullText = System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. at Sys

我有一个使用内置webbrowser控件的程序。在使用过程中的某个时刻,我不确定在什么时候,但它似乎是随机的,我得到以下错误:

System.AccessViolationException

FullText = System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)

有人知道我为什么会这样做,以及如何防止这样做吗?

我的直觉是,在浏览文档之前,您正在试图操纵文档。在更改文档文本或html之前,请尝试导航到“关于:空白”


如果您已经在执行导航,请注意导航是异步的,因此您需要监视浏览器的事件,以便检测导航何时完成。否则,您可以尝试在文档存在之前写入它。

我们也遇到了这个问题。不一致的情况下,我们将获得此异常

一些问题有助于缩小范围:您是否直接使用任何mshtml接口(例如mshtml.dll)?直接进行COM互操作吗

我们发现,错误地调用某些COM MSHTML接口可能会导致这种情况

我们还发现,错误地进行COM编组可能会导致这种情况

如果内置WebBrowser使用的MSHTML接口导入中存在错误,则可能导致此问题

从另一个域访问文档IFRAME元素可能会导致此问题


文档未完全准备好时调用WebBrowser可能也会导致此问题。

只是一个建议,我不是这方面的专家,但在以前的应用程序中经常使用WebBrowser,但是,为什么不编写一个函数,在尝试向浏览器传递任何信息之前等待1秒,并始终事先检查readystate呢。
可能会让它慢一点,但它应该是防弹的

您导航到的页面是否承载任何ActiveX控件?如果是,其中一个可能有缺陷。同时检查IE中的页面。看看它们是否以同样的方式崩溃。这将有助于隔离特定于内容或浏览器控件的内容。

我最后只是在浏览器中打开了网页。这样我就不用担心了。但它抛出这个错误仍然很奇怪。

这似乎是Vista的问题,我遇到的是,我的C#webBrowser1打开了一个网页,该网页运行一个java小程序,该程序打开了一个运行ActiveX应用程序/脚本的外部IE网页

当ActiveX脚本尝试更新回C#app的内存时,Vista中的DEP“Data Execution Prevention”将此操作标记为恶意/病毒,并以System.AccessViolationException结束程序。异常:尝试读取或写入受保护的内存。这通常表示其他内存已损坏。”

我的修复方法是在Vista中使用cmd中的这一行打开DEP

"bcdedit.exe /set {current} nx AlwaysOff"
然后重新启动机器

XP也运行DEP,所以在某些情况下,我猜这种感冒也会发生在这里。 要测试是否是DEP问题,请执行此操作

右键单击“我的电脑” 选择“属性”和“高级” 在“启动和恢复”下,单击设置 现在点击“编辑” 记事本刚刚开始。只需更换线路: 代码: 无需始终执行选择权 重新启动电脑以完成交易

如果要重新激活DEP,则足以进行反向操作,如下所示:

取而代之 引述:
始终如果noexecute=noexecute=optin

我们最近在一些客户的机器上遇到类似问题。这个问题原来是某些环境中MSHTML控件中的一个bug。该问题的一个常见症状似乎是jscript.dll库的注册中断

可能有助于诊断是否是同一问题的症状-jscript.dll未在调试器的模块中列出,且未由进程加载;崩溃的本机堆栈跟踪如下所示:

mshtml!CRootTracker::CollectGarbageInternal+0xd
mshtml!CDoc::ReduceMemoryPressureTask+0x29
mshtml!CStackPtrAry<unsigned long,12>::GetStackSize+0xb6
mshtml!GlobalWndProc+0x183
USER32!InternalCallWinProc+0x23
USER32!UserCallWinProcCheckWow+0x109
USER32!DispatchMessageWorker+0x3bc
USER32!DispatchMessageW+0xf

这两个命令都必须“以管理员身份运行”。

在尝试访问WebBrowser.ReadyState和WebBrowser.Document时,我在各种情况下都遇到了此异常


我只在WindowsXP32位上有例外。在其他解决方案无效后,这似乎是一个线程问题。我用互斥锁包围了访问web浏览器控件的所有代码块,这似乎解决了问题。

我没有在文档中写入代码。我只是将URL传递给webbrowser。我还有一个后退和刷新按钮。我在任何时候都不会处理文档中的文本或html。我最初接受了这一点,但有些人可能无法使用这一点作为答案,所以,只要其他人有问题,我就暂时不回答这个问题。这也发生在XP机器上。XP也运行DEP,所以我会在调试时尝试打开DEP,看看这是否是问题。如果有人找到一致的解决方案,请告诉我,我会接受。我通过在应用程序外部打开浏览器而不是浏览器控件来解决这个问题。有没有办法将问题的所有权交给其他人?我不再在这个系统上工作,因此在这里永远不会接受答案…经过10个小时的调试和搜索,这对我很有帮助。谢谢顺便说一下,我在Windows7中遇到了异常。
C:\Windows\System32\regsvr32.exe C:\Windows\System32\jscript.dll
C:\Windows\SysWOW64\regsvr32.exe C:\Windows\SysWOW64\jscript.dll