C# WinForms WebBrowser HtmlDocument.Write在不同的解决方案中表现不同

C# WinForms WebBrowser HtmlDocument.Write在不同的解决方案中表现不同,c#,winforms,webbrowser-control,C#,Winforms,Webbrowser Control,最近,我的应用程序在试图显示相当长(但在其他方面很简单)的HTML电子邮件时崩溃。 崩溃是由mshtml.dll获取堆栈溢出(异常代码0xc00000fd)引起的。这里需要注意的是,这并没有引发异常,但实际上只是使整个程序崩溃。已从Windows事件日志中检索到错误 在调试过程中,我创建了一个较小的示例解决方案,试图缩小问题的范围。然而,它不仅在示例解决方案中工作良好,而且其行为与主程序完全不同,尽管即使对于最简单的HTML字符串也运行相同的代码 代码如下: var webBrowser1=ne

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

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

代码如下:

var webBrowser1=new System.Windows.Forms.WebBrowser();
webBrowser1.AllowNavigation=false;
webBrowser1.AllowWebBrowserDrop=false;
webBrowser1.导航(“关于:空白”);
var doc=webBrowser1.Document.OpenNew(true);
doc.Write(“这是一个新的HTML文档”);
var count=doc.All.count;
var html=doc.All[0].OuterHtml;
在样本溶液中,其计算结果为:

count=4;//[HTML,标题,标题,正文]
html=“\r\n这是一个新的html文档。”;
同时,在主程序中,它将显示:

count=3;//[HTML,头,体]
html=“这是一个新的html文档。”;
这些差异很小,但主要是由于使用了简单的HTML。导致坠机的原因有相当大的不同

我完全不明白结果会有多么大的不同

该文件适用于以下国家:

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

但我不知道DomDocument是如何提供的,也不知道它们为什么会不同。这两种解决方案都在x64调试模式和NetFramework 4.6.2下运行。 两者都加载模块:
C:\WINDOWS\assembly\GAC\Microsoft.mshtml\7.0.3300.0\uuu b03f5f7f1d50a3a\Microsoft.mshtml.dll

这些怎么可能产生不同的结果?! 欢迎大家帮忙。
提前感谢。

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

HKEY\U当前用户\软件\ Microsoft\Internet Explorer\Main\FeatureControl\FEATURE\U浏览器\仿真

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


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

Replace
webBrowser1.Navigate(“about:blank”)webBrowser1进行代码>导航(“”)
并将HTML5标题添加到您写入
HtmlDocument
的任何内容中(例如,
“正文”
)。--如果你的应用程序从GAC那套古老版本的
mshtml
(v.7,而当前版本是v.11)中钓鱼,那么你就有问题了。这里描述了尝试改变的第一件事:——在此之后,您可能需要从当前的
mshtml.dll
…@Jimi重新创建TypeLibrary。注册表项产生了影响,因为所讨论的主程序已经注册了一个。然而,GAC参考最终来自
C:\ProgramFiles(x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\PublicAssemblys\Microsoft.mshtml.dll
,即7.0.3300。真正的
mshtml.dll
及其
mshtml.tlb
位于
[drive]:\Windows\System32
中。要重新生成库并在应用程序中使用它,请参见此处:。这非常重要,因为您现在引用的文物缺少很多东西。如果可能,请转到WebView2:--