在Vista 64位上使用C#或VBS中的32位COM对象,出现错误80004005
我需要一些读心术,因为我正在尝试做我不完全理解的事情 有一个32位应用程序(称为CQG的电子交易应用程序),它为外部访问提供COM API。我有从Excel、.NET(C++、VB和C#)和shell VBScript访问此API的示例程序和脚本。我将这些.NET应用程序作为源代码和编译的可执行文件(32位,在Windows XP上编译) 现在我有了64位的WindowsVista Home,这让我头晕目眩。Excel示例工作得很好(在Excel 2003中)。编译的.NET示例可执行文件也可以工作 但是,当我尝试运行转换为Visual Studio C#Expression并由其编译的.NET C#sample时,或者运行VBScript脚本时,在尝试创建对象时,我遇到了错误80004005。最初.NET应用程序也给了我80040154,但后来我想出了如何让它生成32位代码而不是64位代码,所以现在C#和VBScript应用程序中的错误是一样的。这就是我目前取得的所有进步 是的,我尝试从VBS上的SysWOW64文件夹运行32位版本的cscript.exe/WScript,但结果仍然是一样的(80004005) 如何解决这个问题?我几乎准备好相信这实际上是不可能的,但Excel VBA工作正常,在Windows XP上编译的.NET可执行文件运行正常这一事实让我很生气。应该有一种方法来击败这件事(一些可能只有WindowsVista开发者知道的秘密)!我将感谢任何帮助 PS:我相信代码示例在这里没有多大意义,但这是失败的VBScript行:在Vista 64位上使用C#或VBS中的32位COM对象,出现错误80004005,c#,.net,com,64-bit,wsh,C#,.net,Com,64 Bit,Wsh,我需要一些读心术,因为我正在尝试做我不完全理解的事情 有一个32位应用程序(称为CQG的电子交易应用程序),它为外部访问提供COM API。我有从Excel、.NET(C++、VB和C#)和shell VBScript访问此API的示例程序和脚本。我将这些.NET应用程序作为源代码和编译的可执行文件(32位,在Windows XP上编译) 现在我有了64位的WindowsVista Home,这让我头晕目眩。Excel示例工作得很好(在Excel 2003中)。编译的.NET示例可执行文件也可以
Set CEL = WScript.CreateObject("CQG.CQGCEL.4.0", "CEL_")
这是C#:
更新:忘了说是关了,当然。我是通过管理员权限的帐户工作的
我还尝试使用Process Monitor查看哪些注册表项被读取,但对于这个对象的GUID,一切看起来都正常。我无法识别其他一些guid,因此我不确定它们是否重要
此COM对象是否有可能使用Internet Explorer而得到错误的对象(例如Internet Explorer 7而不是Internet Explorer 6引擎或其他东西)?您可以尝试一些有用的方法:
对于64位机器,您必须记住许多事情。这些都是过去让我抓狂的事情
我的建议是构建一个32位的应用程序,看看会发生什么。问题可能是DEP 我和你有完全相同的问题,并从CQG的技术支持部门得到了一些帮助。默认情况下,Windows Vista和Windows 7将启用数据执行预防。您可以在具有管理员权限的命令提示符下使用
bcdedit.exe /set {current} nx AlwaysOff
稍后,如果需要,可以使用重新打开
bcdedit.exe /set {current} nx AlwaysOn
不会提示重新启动,但这是必要的。您可以使用检查您的DEP策略
wmic OS Get DataExecutionPrevention_SupportPolicy
其中0
为始终关闭
,1
为始终打开
,2
为选择加入
(以及默认值),而3
为选择退出
将我的更改为“始终关闭”并重新启动后,我能够在不抛出80004005错误的情况下进行编译。更新了UAC和Process Monitor。我不确定我是否理解非托管调试器是什么,或者VS Express是否有它=\谢谢是的,这就是我所做的,我的C#应用程序构建为32位(x86)。进程监视器显示从Wow6432Node分支发出的请求。您知道这一点吗?
wmic OS Get DataExecutionPrevention_SupportPolicy