在C#中使用不同版本的MSHTML

时间:2009-11-20 13:34:44

标签: c# .net mshtml

有没有办法强制C#应用程序使用特定版本的MSHTML DLL?

我正在尝试编写一个使用不同版本的IE渲染引擎的应用程序,以帮助网页设计师测试他们的作品,以便向后兼容IE6,IE7等......

据我所知,到目前为止,SHDOCVW DLL“托管”或“运行”MSHTML DLL(http://msdn.microsoft.com/en-us/library/aa741313(VS.85).aspx)。

我已经能够在应用程序表单上创建Microsoft Web浏览器(COM组件版本1.1),方法是将版本6.0.2900.2877 SHDOCVW.DLL拖到Visual C#2008 Express Edition中的工具箱上,以及创建标准WebBrowser。 NET组件希望COM组件使用v6的MSHTML(位于与v6 SHDOCVW DLL相同的文件夹中)...但是两个组件似乎都使用相同的(可能是系统?)版本的MSHTML。

我在XP SP2中使用IE6和XP SP3与IE7运行应用程序。

在使用IE6的SP2中,两个浏览器组件都报告$_SERVER['HTTP_USER_AGENT']为MSIE 6.0,而在带有IE7的SP3中,两个浏览器组件都报告$_SERVER['HTTP_USER_AGENT']为MSIE 7.0。

是否有人知道是否可以强制使用特定版本的MSHTML DLL?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

无法帮助代码,但是这个程序已经完成了你想要实现的目标

IETester

虽然

似乎有点沮丧

答案 1 :(得分:1)

您可以使用Type.GetTypeFromProgId方法来解析您要使用的特定MSHTML版本的ProgId字符串。 然后使用Activator.CreateInstance()创建Web浏览器控件的实例。 之后,您可以将结果转换为您想要使用的相应接口,如下例所示(遗憾的是,我不知道MSHTML的正确ProgId):

string progId = "MyProgIdValue";
Type type = Type.GetTypeFromProgID(progId);
object mshtml = Activator.CreateInstance(type);