用C#写了个小程序,想在其它机器上使用。
在其它机器上安装了vs2005(我用这个开发的)自带的的.net framework 2.0及语言包。然后复制我的程序过来包括工程目录下的所有DLL文件。不能使用。安装VS2005后可以使用了。但不能每台机器都安装啊.
我引用了 MSHTML 和 SHDocVw.dll 是个网页程序。
那位给指教一下。
在其它机器上安装了vs2005(我用这个开发的)自带的的.net framework 2.0及语言包。然后复制我的程序过来包括工程目录下的所有DLL文件。不能使用。安装VS2005后可以使用了。但不能每台机器都安装啊.
我引用了 MSHTML 和 SHDocVw.dll 是个网页程序。
那位给指教一下。
在其它机器上安装了vs2005(我用这个开发的)自带的的.net framework 2.0及语言包。
是不是运行时什么提示都没有?打包的时候查看依赖项,看是不是有缺少第三方控件或dll
2、“运行是弹出一个对话框说:遇到问题需要关闭” .net程序出现错误,一般会有个详细信息按钮,你没看信息
3、MSHTML 和 SHDocVw.dll 不是.net环境下的文件,是com组件.net要使用需要封装。而vs安装后会有几个默认封装过的其中有MSHTML,所在位置
Program Files\Microsoft.NET\Primary Interop Assemblies估计就是这些com组件的封装类没复制过去,看了详细出错信息的话,问题应该很明显看出来
1.我用VS自带的安装和部署做了一个打包,但只多了一个 Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll 这么个东西,另外由于出现一个错误:应将“shdocvw.dll”排除,原因是其源文件“C:\WINNT\system32\shdocvw.dll”受到“Windows 系统文件保护”。我认为这个文件是系统自带的,也将他排除了。
2.你说的详细信息按钮,我在另外一台机器上看到过,但现在这台机器确实没有,而另一台机器已经让我安装了vs2005,系统可以正常运行,也看不到了。
3.感谢这条意见,正在测试!!!
无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“mshtml.HTMLImgClass”。进入 CLR 且不支持 IProvideClassInfo 或没有注册任何互操作程序集的 COM 组件都将包装在 __ComObject 类型中。这种类型的实例不能强制转换为任何其他类;不过,只要基础 COM 组件支持对接口 IID 的 QueryInterface 调用,就能将这些实例强制转换为接口。以下是详细信息:有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。************** 异常文本 **************
System.InvalidCastException: 无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“mshtml.HTMLImgClass”。进入 CLR 且不支持 IProvideClassInfo 或没有注册任何互操作程序集的 COM 组件都将包装在 __ComObject 类型中。这种类型的实例不能强制转换为任何其他类;不过,只要基础 COM 组件支持对接口 IID 的 QueryInterface 调用,就能将这些实例强制转换为接口。
在 xx.Form1.loginuser()
在 xx.Form1.登陆()
在 xx.Form1.主时间驱动(Object sender, EventArgs e)
在 System.Windows.Forms.Timer.OnTick(EventArgs e)
在 System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** 已加载的程序集 **************
mscorlib
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
xx
程序集版本: 1.0.0.0
Win32 版本: 1.0.0.0
基本代码: file:///D:/Program%20Files/DDY/xx.exe
----------------------------------------
System.Windows.Forms
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Microsoft.mshtml
程序集版本: 7.0.3300.0
Win32 版本: 7.0.3300.0
基本代码: file:///D:/Program%20Files/DDY/Microsoft.mshtml.DLL
----------------------------------------
AxInterop.SHDocVw
程序集版本: 1.1.0.0
Win32 版本: 1.1.0.0
基本代码: file:///D:/Program%20Files/DDY/AxInterop.SHDocVw.DLL
----------------------------------------
System.Windows.Forms.resources
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.42 (RTM.050727-4200)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_zh-CHS_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
Interop.SHDocVw
程序集版本: 1.1.0.0
Win32 版本: 1.1.0.0
基本代码: file:///D:/Program%20Files/DDY/Interop.SHDocVw.DLL
----------------------------------------
Accessibility
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.42 (RTM.050727-4200)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
mscorlib.resources
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------************** JIT 调试 **************
要启用实时(JIT)调试,
该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置
jitDebugging 值。
编译应用程序时还必须启用
调试。例如: <configuration>
<system.windows.forms jitDebugging="true" />
</configuration>启用 JIT 调试后,任何无法处理的异常
都将被发送到在此计算机上注册的 JIT 调试器,
而不是由此对话框处理。
System.InvalidCastException: 无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“mshtml.HTMLImgClass”。进入 CLR 且不支持 IProvideClassInfo 或没有注册任何互操作程序集的 COM 组件都将包装在 __ComObject 类型中。这种类型的实例不能强制转换为任何其他类;不过,只要基础 COM 组件支持对接口 IID 的 QueryInterface 调用,就能将这些实例强制转换为接口。 查看了源程序如下:
IHTMLDocument2 doc;
doc = (IHTMLDocument2)axWebBrowser.Document;
IHTMLDocument3 doc1;
int i = 0;
object j = (object)i;
IHTMLWindow2 frame = (IHTMLWindow2)doc.frames.item(ref j);
doc1 = (IHTMLDocument3)frame.document;
HTMLInputElement username = (HTMLInputElement)doc1.getElementById("user_name");
HTMLInputElement password = (HTMLInputElement)doc1.getElementById("password");
HTMLImgClass imgLogin = (HTMLImgClass)doc1.getElementById("imgLogin");我认为还是有组件没有注册,但不知道该怎么办了,求大家帮忙。
1.没有装.Net Framework
2.缺少关联的程序集如果没有装.Net Framework错误提示不会这样。原因应该是缺少关联的程序集。找到错误的地方,程序引用了C:\Windows\System32\mshtml.tlb,当使用 mshtml 空间中的对象时就提示“遇到问题需要关闭。我们对此引起的不便表示抱歉。”解决的方法
通过类型库导入程序(Tlbimp.exe)将 COM 类型库中的类型定义转换为公共语言运行库程序集中。
在 Visual Studio 命令提示中执行
tlbimp C:\Windows\System32\mshtml.tlb /out:C:\mshtml.dll
转换需要一定时间,生成的 mshtml.dll 有8M。
在WinForms程序中添加引用这个 mshtml.dll,不要引用 C:\Windows\System32\mshtml.tlb
最后把这个mshtml.dll和exe文件复制过去就可以用了。
可惜我照做了我的问题还是没有解决,不知道你的有没有解决了,如解决了烦请赐教
tlb /out:C:\mshtml.dll
Microsoft (R) .NET Framework Type Library to Assembly Converter 2.0.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.TlbImp : warning TI0000 : Primary interop assembly 'Microsoft.mshtml, Version=7.
0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is already registere
d for type library 'C:\Windows\System32\mshtml.tlb'.
TlbImp : warning TI0000 : “IActiveIMMApp.GetDefaultIMEWnd”的至少一个参数不能由
运行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安全
代码进行操作。
TlbImp : warning TI0000 : 类型库导入程序未能转换成员“__MIDL___MIDL_itf_mshtml_0
256_0010.hbmpChecked”的签名。
TlbImp : warning TI0000 : 类型库导入程序未能转换成员“__MIDL___MIDL_itf_mshtml_0
256_0010.hbmpUnchecked”的签名。
TlbImp : warning TI0000 : 类型库导入程序未能转换成员“__MIDL___MIDL_itf_mshtml_0
256_0010.hbmpItem”的签名。
TlbImp : warning TI0000 : 类型库导入程序未能转换成员“_userBITMAP.pBuffer”的签
名。
TlbImp : warning TI0000 : 类型库导入程序未能转换成员“__MIDL___MIDL_itf_mshtml_0
256_0011.hbmpChecked”的签名。
TlbImp : warning TI0000 : 类型库导入程序未能转换成员“__MIDL___MIDL_itf_mshtml_0
256_0011.hbmpUnchecked”的签名。
TlbImp : warning TI0000 : 类型库导入程序未能转换成员“__MIDL___MIDL_itf_mshtml_0
256_0011.hbmpItem”的签名。
TlbImp : warning TI0000 : 类型库导入程序未能转换成员“_FLAGGED_BYTE_BLOB.abData
”的签名。
Type library imported to C:\mshtml.dllC:\Program Files\Microsoft Visual Studio 8\VC>这是我照做了输出的东西,