mshtml在.net中的使用问题
2015-10-28 16:47
651 查看
今天在安装winform应用程序时,发现运行良好的程序在客户机上无法启动。调试了半天,发现原来是第三方程序中包含了对mshtml组件的调用,郁闷。
mshtml 在有的环境中被安装,而在有些环境中却没被安装。如:在我们已经装了Visual Studio 2005,Visual Studio 2008的环境中,都可以直接调用mshtml,而只安装了net framework2.0的电脑中,则没有安装该组件,导致调用该组件的程序无法运行,或运行时报错。
于是乎,在此小结一翻,以便回顾。一般,我们可以在电脑%systemroot%\system32\mshtml.dll位置,找到该组件。而net中,该组件又实现了Com接口,通过COM Interop service调用。因此,net中调用的mshtml实际上是%Program Files%\Microsoft.NET\Primary Interop Assemblies\目录下的Microsoft.mshtml.dll。而我们使用的程序中,特别是在安装了Visual Studio 2005或Visual Studio 2008后,mshtml已经被注册到了GAC(全局程序集缓存)。因此,在此环境下更是可以直接调用了,而不用让程序随时带着个小尾巴(Microsoft.mshtml.dll)到处跑。
以个人本机为例,总结了一下,mshtml的问题处理方式如下:
1. C:\WINDOWS\system32\mshtml.dll 为win32下的调用,net无法使用
2. 查看C:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll 文件,如果有此文件,则可以拷贝此文件,并让开发的程序引用该文件,在客户机上安装时,该文件要一起打包安装。如果没有该文件,可以尝试在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下运行RegAsm.exe,注册1.中描述的mshtml.dll组件,注册后,Primary Interop Assemblies目录中便出现了该dll。
3. 在安装了net sdk的环境中,Visual Studio 2005和Visual Studio 2008都安装了sdk,可以运行gacutil.exe,将Primary Interop Assemblies目录下的Microsoft.mshtml.dll注册到全局程序集缓存中,因此在运行程序时,程序便可不用再带着Microsoft.mshtml.dll一起移动了。
另:a>一般在开发电脑中会有sdk,因此可以将Microsoft.mshtml.dll注册到全局程序集缓存中,但是在客户机上,通常只装了.Net Framework,还是让程序带着Microsoft.mshtml.dll一起运行更方便。
b> 另外,有时我们也可以在C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11 目录或 C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12目录下发现该组件。不要使用这些dll, net需要使用有强名称的dll,这些不适用。
以上记录仅为个人小结,如有错误,请留言告知,万分感谢!!!
mshtml 在有的环境中被安装,而在有些环境中却没被安装。如:在我们已经装了Visual Studio 2005,Visual Studio 2008的环境中,都可以直接调用mshtml,而只安装了net framework2.0的电脑中,则没有安装该组件,导致调用该组件的程序无法运行,或运行时报错。
于是乎,在此小结一翻,以便回顾。一般,我们可以在电脑%systemroot%\system32\mshtml.dll位置,找到该组件。而net中,该组件又实现了Com接口,通过COM Interop service调用。因此,net中调用的mshtml实际上是%Program Files%\Microsoft.NET\Primary Interop Assemblies\目录下的Microsoft.mshtml.dll。而我们使用的程序中,特别是在安装了Visual Studio 2005或Visual Studio 2008后,mshtml已经被注册到了GAC(全局程序集缓存)。因此,在此环境下更是可以直接调用了,而不用让程序随时带着个小尾巴(Microsoft.mshtml.dll)到处跑。
以个人本机为例,总结了一下,mshtml的问题处理方式如下:
1. C:\WINDOWS\system32\mshtml.dll 为win32下的调用,net无法使用
2. 查看C:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll 文件,如果有此文件,则可以拷贝此文件,并让开发的程序引用该文件,在客户机上安装时,该文件要一起打包安装。如果没有该文件,可以尝试在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下运行RegAsm.exe,注册1.中描述的mshtml.dll组件,注册后,Primary Interop Assemblies目录中便出现了该dll。
3. 在安装了net sdk的环境中,Visual Studio 2005和Visual Studio 2008都安装了sdk,可以运行gacutil.exe,将Primary Interop Assemblies目录下的Microsoft.mshtml.dll注册到全局程序集缓存中,因此在运行程序时,程序便可不用再带着Microsoft.mshtml.dll一起移动了。
另:a>一般在开发电脑中会有sdk,因此可以将Microsoft.mshtml.dll注册到全局程序集缓存中,但是在客户机上,通常只装了.Net Framework,还是让程序带着Microsoft.mshtml.dll一起运行更方便。
b> 另外,有时我们也可以在C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11 目录或 C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12目录下发现该组件。不要使用这些dll, net需要使用有强名称的dll,这些不适用。
以上记录仅为个人小结,如有错误,请留言告知,万分感谢!!!
相关文章推荐
- Html 中表格导出生成excel文件,解决中文导出失败问题。
- HTML中Input输入框提示/设置禁用/自动获取焦点
- HTML meta viewport属性
- HTML中小问题
- HTML中小问题
- 把pdf转换成html格式的转换方法分享
- html div 学习记录
- html网页自动跳转的三大技巧
- HTML学习 <5>
- HTML 全局属性
- HTML 5 的data-* 自定义属性
- 理解HTML中的id属性和name属性
- html标记语言的常用标签,表格
- html标记语言的常用标签一
- HTML文档DOCTYPE声明
- html head 头部中的元素内容
- HTML标签类型及写法
- 不解析html?
- 超级有趣HTML
- POI/Excel/HTML单元格公式问题