1

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

这种操作模式已在各种操作系统上工作,并已成功部署到 Windows XP、Vista 和 7 环境中。

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

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

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 位的。

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

有没有人经历过类似的事情或关于问题可能是什么的任何指示?

4

2 回答 2

2

经过数小时尝试不同的事情后,我找到了解决方案。我必须启用 .NET Framework 3.5(包括 Framework 2)并将路径更改regsvcs.exeC:\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/

于 2015-01-28T03:48:47.367 回答
0

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

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

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

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

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

于 2015-07-08T08:02:47.497 回答