为什么C#winforms应用程序在没有安装VS.NET的情况下无法工作?

为什么C#winforms应用程序在没有安装VS.NET的情况下无法工作?,c#,events,webbrowser-control,C#,Events,Webbrowser Control,我有一个winforms c#应用程序,里面有一个通过VS.NET 2008生成的嵌入式webbrowser控件。我们通过从HTMLDocumentEvents2继承事件类来接收事件 public class IEHTMLDocumentEvents : mshtml.HTMLDocumentEvents2 { public bool onclick(mshtml.IHTMLEventObj pEvtObj) { // Clicking on an in

我有一个winforms c#应用程序,里面有一个通过VS.NET 2008生成的嵌入式webbrowser控件。我们通过从HTMLDocumentEvents2继承事件类来接收事件

 public class IEHTMLDocumentEvents : mshtml.HTMLDocumentEvents2
 {
     public bool onclick(mshtml.IHTMLEventObj pEvtObj)
     {
         // Clicking on an input (checkbox, radio, button, image)
         if (pEvtObj.srcElement.tagName == "INPUT")
         {
             // The following will result in a null pointer without VS.NET installed
             HTMLInputElementClass input = pEvtObj.srcElement as HTMLInputElementClass;
         }
     }
 }
在安装了VS.NET的开发人员机器上单击webbrowser控件中的元素时,上面的代码可以正常工作。 但是,当未安装VS.NET时,它无法强制转换pEvtObj.src元素。当我们用C#安装最基本的VS.NET时,这就立即开始工作了

注意:c#app的其余部分工作正常,您也可以通过控件浏览web,只是上面的“onclick”之类的事件无法正确处理

我认为这将是一个DLL版本加载的问题,但对加载的文件进行差异化处理只表明了细微的差异

1c1
< Process: C# App without VS.NET installed
---
> Process: C# App with VS.NET 2008 installed
18d17
< C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\CustomMarshalers\e148983beeb0f30918b0564849a16456\CustomMarshalers.ni.dll CustomMarshalers.ni.dll Microsoft .NET Framework Custom Marshalers Microsoft Corporation 2.0.50727.3053
36d34
< C:\Documents and Settings\XpHome\Local Settings\History\History.IE5\index.dat index.dat   
37a36
> C:\Documents and Settings\XpHome\Local Settings\History\History.IE5\index.dat index.dat   
44,45c43,44
< C:\Program Files\<hidden>\<hidden>\Microsoft.mshtml.dll Microsoft.mshtml.dll     7.0.3300.1
< C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\Microsoft.VisualBas#\5b3d048d8c003d743ea5e72caf07773a\Microsoft.VisualBasic.ni.dll Microsoft.VisualBasic.ni.dll Visual Basic Runtime Library Microsoft Corporation 8.0.50727.3053
---
> C:\WINDOWS\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.mshtml.dll Microsoft.mshtml.dll     7.0.3300.1
> C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualBasic\8.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualBasic.dll Microsoft.VisualBasic.dll Visual Basic Runtime Library Microsoft Corporation 8.0.50727.3053
50,52c49,51
< c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll mscorjit.dll Microsoft .NET Runtime Just-In-Time Compiler Microsoft Corporation 2.0.50727.3053
< C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\9adb89fa22fd5b4ce433b5aca7fb1b07\mscorlib.ni.dll mscorlib.ni.dll Microsoft Common Language Runtime Class Library Microsoft Corporation 2.0.50727.3053
< c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll mscorwks.dll Microsoft .NET Runtime Common Language Runtime - WorkStation Microsoft Corporation 2.0.50727.3053
---
> c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll mscorjit.dll Microsoft .NET Runtime Just-In-Time Compiler Microsoft Corporation 2.0.50727.3082
> C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\7124a40b9998f7b63c86bd1a2125ce26\mscorlib.ni.dll mscorlib.ni.dll Microsoft Common Language Runtime Class Library Microsoft Corporation 2.0.50727.3603
> c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll mscorwks.dll Microsoft .NET Runtime Common Language Runtime - WorkStation Microsoft Corporation 2.0.50727.3603
94,98c93,97
< C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Configuration\cb4cb21d14767292e079366a5d3d76cd\System.Configuration.ni.dll System.Configuration.ni.dll System.Configuration.dll Microsoft Corporation 2.0.50727.3053
< C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Drawing\6978f2e90f13bc720d57fa6895c911e2\System.Drawing.ni.dll System.Drawing.ni.dll .NET Framework Microsoft Corporation 2.0.50727.3053
< C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\aa7926460a336408c8041330ad90929d\System.ni.dll System.ni.dll .NET Framework Microsoft Corporation 2.0.50727.3053
< C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Windows.Forms\9a254c455892c02355ab0ab0f0727c5b\System.Windows.Forms.ni.dll System.Windows.Forms.ni.dll .NET Framework Microsoft Corporation 2.0.50727.3053
< C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Xml\36f3953f24d4f0b767bf172331ad6f3e\System.Xml.ni.dll System.Xml.ni.dll .NET Framework Microsoft Corporation 2.0.50727.3053
---
> C:\WINDOWS\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll System.Configuration.dll System.Configuration.dll Microsoft Corporation 2.0.50727.3053
> C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Drawing\abb2ac7e08bee026f857d8fa36f9fe6f\System.Drawing.ni.dll System.Drawing.ni.dll .NET Framework Microsoft Corporation 2.0.50727.3053
> C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\3de5bd01124463d7862bd173af90bc83\System.ni.dll System.ni.dll .NET Framework Microsoft Corporation 2.0.50727.3053
> C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Windows.Forms\d2ea8d76f015817db1607075812b555f\System.Windows.Forms.ni.dll System.Windows.Forms.ni.dll .NET Framework Microsoft Corporation 2.0.50727.3053
> C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Xml\5913d3f81e77194ec833991b1047a532\System.Xml.ni.dll System.Xml.ni.dll .NET Framework Microsoft Corporation 2.0.50727.3082
1c1
过程:安装了VS.NET2008的C#应用程序
18d17
C:\Documents and Settings\XpHome\Local Settings\History\History.IE5\index.dat index.dat
44,45c43,44
C:\WINDOWS\assembly\GAC\Microsoft.mshtml\7.0.3300.0\uuu b03f5f7f11d50a3a\Microsoft.mshtml.dll Microsoft.mshtml.dll 7.0.3300.1
>C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualBasic\8.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualBasic.dll Microsoft.VisualBasic.dll Visual Basic运行库Microsoft Corporation 8.0.50727.3053
50,52c49,51
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll mscorjit.dll Microsoft.NET运行时即时编译器Microsoft Corporation 2.0.50727.3082
>C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\7124a40b9998f7b63c86bd1a2125ce26\mscorlib.ni.dll mscorlib.ni.dll Microsoft公共语言运行库Microsoft Corporation 2.0.50727.3603
>c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll mscorwks.dll Microsoft.NET运行时公共语言运行时-工作站Microsoft Corporation 2.0.50727.3603
94,98c93,97
C:\WINDOWS\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll System.Configuration.dll System.Configuration.dll Microsoft Corporation 2.0.50727.3053
>C:\WINDOWS\assembly\NativeImages\u v2.0.50727\u 32\System.Drawing\ABB2AC7E08BEE06F857D8FA36F9FE6F\System.Drawing.ni.dll System.Drawing.ni.dll.NET Framework Microsoft Corporation 2.0.50727.3053
>C:\WINDOWS\assembly\NativeImages\U v2.0.50727\U 32\System\3de5bd01124463d7862bd173af90bc83\System.ni.dll System.ni.dll.NET Framework Microsoft Corporation 2.0.50727.3053
>C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.WINDOWS.Forms\d2ea8d76f015817db1607075812b555f\System.WINDOWS.Forms.ni.dll System.WINDOWS.Forms.ni.dll.NET Framework Microsoft Corporation 2.0.50727.3053
>C:\WINDOWS\assembly\NativeImages\u v2.0.50727\u 32\System.Xml\5913d3f81e77194ec833991b1047a532\System.Xml.ni.dll System.Xml.ni.dll.NET Framework Microsoft Corporation 2.0.50727.3082

理论上,由于您计算机上的IE版本和用户计算机上的IE版本可能不同,因此您需要为用户的IE版本生成包装。这可以通过在安装程序中添加一个自定义操作来完成,该操作在命令提示符下运行tlbimp mshtml.tlb,但首先需要在计算机上运行.Net SDK,并且存在为事件生成错误签名的错误,因此如果您的代码依赖于要触发的事件,您可能希望为IE6用户提供IE7版本

幸运的是,IE类型库中的大多数接口多年来没有改变(对于您最感兴趣的接口)。您可以随Microsoft.mshtml.dll一起发布应用程序,该应用程序包含在Office PIA中,因此您可以从Office开发人员处找到必备软件包

或者更好,您可以编写一个较小的程序集,只包含您使用的接口,然后重新分发它

标记网络浏览器