程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了WinForms WebBrowser HtmlDocument.Write 在不同的解决方案中表现不同大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决WinForms WebBrowser HtmlDocument.Write 在不同的解决方案中表现不同?

开发过程中遇到WinForms WebBrowser HtmlDocument.Write 在不同的解决方案中表现不同的问题如何解决?下面主要结合日常开发的经验,给出你关于WinForms WebBrowser HtmlDocument.Write 在不同的解决方案中表现不同的解决方法建议,希望对你解决WinForms WebBrowser HtmlDocument.Write 在不同的解决方案中表现不同有所启发或帮助;

最近,我的应用程序在尝试显示相当长(但很简单)的 HTML 电子邮件时崩溃了。 崩溃是由 msHTMl.dll 堆栈溢出(异常代码 0xc00000fd)引起的。这里需要注意的是,这并没有抛出异常,但它实际上只是使整个程序崩溃了。该错误是从 windows 事件日志中检索到的。

在调试过程中,我创建了一个较小的示例解决方案来尝试缩小问题的范围。然而,它不仅在示例解决方案中运行良好,而且即使对于最简单的 HTML 字符串运行相同的代码,它的行为也与主程序完全不同。

代码如下:

var webbrowser1 = new System.windows.Forms.Webbrowser();
webbrowser1.AllowNavigation = false;
webbrowser1.AllowWebbrowserDrop = false;
webbrowser1.Navigate("about:blank");

var doc = webbrowser1.document.openNew(true);
doc.Write("<HTML><BODY>This is a new HTML document.</BODY></HTML>");
var count = doc.All.Count;
var HTML = doc.All[0].outerHTML;

在示例解决方案中,它的计算结果为:

count = 4; // [HTML,head,@R_403_5979@,BODY]
HTML = "<HTML><head></head>\r\n<BODY>This is a new HTML document.</BODY></HTML>";

同时在主程序中它出现:

count = 3; // [HTML,BODY]
HTML = "<HTML><head></head><body>This is a new HTML document.</body></HTML>";

这些是很小的差异,但这主要是由于使用了简单的 HTML。导致崩溃的那个有相当显着的差异。

我对结果如何会有如此大的不同感到非常困惑。

HtmlDocument.Write(String) 的文档指出:

建议您使用 Write 方法编写完整的有效 HTML 文档,包括 HTML 和 BODY 标签。但是,如果您只编写 HTML 元素,文档对象模型 (DOM) 将为您提供这些元素。

但我不知道 Domdocument 是如何提供的,也不知道为什么它们首先会有所不同。这两种解决方案都在 x64 调试模式和 Net-Framework 4.6.2 下运行。 两者都加载模块:C:\windows\assembly\GAC\Microsoft.msHTML\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.msHTMl.dll

这些怎么可能产生不同的结果?! 欢迎任何和所有帮助。 提前致谢。

解决方法

行为上的差异源于 Jimi 提出的注册表项和链接 here

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

重申一下,在上面的注册表中,主程序有一个条目 "ApplicationFilename.exe"=dword:00002af9,而我的新测试应用程序没有。

这本身并不能解释 mshtml.dll 本身的崩溃,但由于问题是关于行为的差异,我将其作为答案发布。崩溃很可能与 Visual studio 使用的过时版本有关,但我还没有机会研究一些建议的修复方法。

大佬总结

以上是大佬教程为你收集整理的WinForms WebBrowser HtmlDocument.Write 在不同的解决方案中表现不同全部内容,希望文章能够帮你解决WinForms WebBrowser HtmlDocument.Write 在不同的解决方案中表现不同所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。