.NET WebBrowser控件是否可以使用IE9?

我意识到这是一个早期发布和不稳定。 我不会梦想在任何其他项目中换掉IE9的默认webbrowser控件,但在这种情况下我特别需要IE9与其他版本进行比较。

我想让.NET WebBrowser控件使用IE9而不是机器上的默认IE版本。 我完全控制了机器,因此破解系统文件或其他可能需要的东西都没有问题。

通常,这可以通过将更新安装到IE来实现,但在IE9的情况下,它安装了一个单独的应用程序,使当前版本的IE保持不变。 这意味着WebBrowser控件继续使用当前版本(这是有道理的,并且是MS的明智之举,因为IE9仍处于开发阶段)。 但在我的(边缘)情况下,我需要WebBrowser控件来使用IE9。

是否可以在.NET表单应用程序中嵌入IE9?

编辑

随着Hans Passant的帮助,我得到了更多。 在IE9的prog文件目录中发生了一些非常有趣的事情。 有一个名为“iepreview.exe.local”的目录,当删除时,会使IE9预览应用程序使用IE8(使用acid3测试检查)。

不是我想要的,但我想知道这是否是我可以根据我的需要进行的某种重定向。

编辑2

我已经尝试将.local hack应用于我的iexplore.exe和我的.NET应用程序的副本,我注意到其他有趣的东西 – 两个应用程序都开始使用IE7而不是IE8(我的IE版本)或IE9。

这可能是iexplore尝试使用IE9然后再回到IE7? 看起来很奇怪它甚至可以使用IE7,但这是它开始使用的useragent字符串。

IE9可以并排安装的唯一方法是它为接口和coclasses使用新的GUID。 这意味着您无法使用WebBrowser,它具有硬编码的GUID。

还有另外一个选项,使用AxHost包装器。 右键单击工具箱,选择项目,选择COM组件选项卡,然后在列表中找到IE9。 不知道它叫什么,旧名称是“Microsoft Web Browser”,由c:\ windows \ system32 \ ieframe.dll提供服务

如果没有友好的WebBrowser和HtmlDocument包装类,您将不得不这样做。

实际上,您可以修改注册表以强制程序使用IE9呈现。 转到HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION并添加一个名为程序名称的新DWORD值(带.exe)和十进制值设置为9999。


您还可以修改注册表以强制程序使用IE9 GPU渲染。 转到HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_GPU_RENDERING并添加一个名为程序名称的新DWORD值(带.exe)和hex值设置为1。


如果您实际上有IE9,这只能工作! 在执行此操作之前,必须首先下载IE9,否则它将无法运行 。 如果要使用IE8渲染页面,只需将9999更改为8888即可。

注意: GPU渲染仅适用于IE9

经过大量的Google-ing后,我发现对于32位和64位应用程序, FEATURE_BROWSER_EMULATION有两组不同的密钥。 您需要根据您运行的机器将您的设置放在正确的位置。 此外,您需要确保安装要模拟的正确版本的浏览器。

32位:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\**FEATURE_BROWSER_EMULATION** Value Key: (DWORD) yourapplication.exe 

64位:

 HKEY_LOCAL_MACHINE\SOFTWARE\**Wow6432Node**\Microsoft\Internet Explorer\MAIN\FeatureControl\**FEATURE_BROWSER_EMULATION** Value Key: (DWORD) yourapplication.exe 

将此键设置为的值(取自此处的MSDN)为十进制值:

9999(0x270F) Internet Explorer 9.网页以IE9标准模式显示,与!DOCTYPE指令无关。

9000(0x2328) Internet Explorer 9.包含基于标准的网页!DOCTYPE指令以IE9模式显示。

8888(0x22B8)网页以IE8标准模式显示,与!DOCTYPE指令无关。

8000(0x1F40)包含基于标准的网页!DOCTYPE指令以IE8模式显示。

7000(0x1B58)包含基于标准的网页!DOCTYPE指令以IE7标准模式显示。