在Windows 8.1上调用COM +组件时出现自动化错误

时间:2015-01-28 00:10:47

标签: windows vb6 windows-8.1 com+ component-services

我有一个遗留的VB6应用程序,它调用用C#编写的COM +组件(针对.NET Framework v2)进行TCP / IP通信。

此操作模式适用于各种操作系统,并已成功部署到Windows XP,Vista和7环境。

我刚开始在Windows 8.1中测试该软件,当VB6应用程序尝试调用COM +组件时,它会报告“自动化错误”。过去这些类型的错误是由于COM +注册失败,并通过使用regsvcs.exe手动注册COM +组件来快速纠正。

该软件由MSI安装,MSI也运行一个调用regsvcs.exe来注册COM +组件的脚本。对于Win 8.1,我必须更改regsvcs.exe的路径:

C:\Windows\Microsoft.NET\Framework\v2.0.50727

致:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

我在Win 7和Win 8.1上测试了这个安装程序。在Win 7上,COM +调用工作正常。我在Win 8.1中遇到的问题是COM +组件似乎已正确注册,但是对组件的调用仍然失败。组件服务中的一切看起来都很好,并且在进行VB6调用时COM +应用程序启动,但返回自动化错误并且调用失败。

注意:我正在测试的Win 7和8.1环境是64位。

似乎有些与组件服务和COM +应用程序相关的内容在Windows 7和Windows 8.1之间发生了变化,但我似乎无法找到解决方案。

有没有人经历过类似的问题或有关问题的指示?

2 个答案:

答案 0 :(得分:2)

经过几个小时尝试不同的事情,我找到了解决方案。我必须启用.NET Framework 3.5(包括框架2)并将regsvcs.exe的路径更改回C:\Windows\Microsoft.NET\Framework\v2.0.50727

现在重新安装后,对COM +组件的调用正在运行。仍然不确定使用v2文件夹中的此实用程序与v4文件夹之间的区别。

顺便说一下,在尝试使用“打开和关闭Windows功能”的同时启用.NET Framework 3.5时程序和功能中的功能,我不断收到错误0x800F0906

我最终不得不使用以下命令从已安装的Windows 8.1 ISO安装它:

dism /online /Enable-Feature /FeatureName:NetFX3 /All /Source:E:\Sources\SxS /LimitAccess

其中E:\是已安装ISO的驱动器号。

我所遵循的流程如下所述: https://yellowduckguy.wordpress.com/2012/10/19/windows-8-fix-enable-feature-net-3-5-error-0x800f0906/

答案 1 :(得分:0)

我面对与你完全相同的问题,我已经制作了一个用于从Vb6调用的.NET COM Interop DLL。我的软件在所有Windows版本上工作,除了一天我发现一些使用Windows 8的计算机在运行我的软件时遇到了麻烦。我得到的错误是自动化错误。

经过研究,我发现如果我们在Window 8上使用.NET版本v4.0.30319来注册我们的.NET 2.0-3.5程序集。它可能不起作用,我不知道为什么,但可能是不同.NET版本的兼容性或Microsoft的新bug。 (我知道.NET 4.0可以运行.NET 2.0程序集,但不知道为什么在Window 8上有一些异常)。

现在对我来说最好的解决方案是:

1)在Window 8上启用.NET 3.5(此解决方案非常耗时,因为您需要在安装程序中发布Windows 8.1 ISO)

2)为您的App构建两个目标版本的.NET框架。因此,如果您的客户使用Window 8,安装程序将安装.NET 4.0应用程序版本。如果低于Window 8,则安装.NET 3.5版本。