【问题标题】:Using System.Collections.ArrayList from .NET in VB6在 VB6 中使用来自 .NET 的 System.Collections.ArrayList
【发布时间】:2019-05-31 10:42:45
【问题描述】:

在我的开发机器和客户环境中,我们有一个 Visual Basic 6 二进制文件可以执行以下操作:

dim x as object
set x = CreateObject("System.Collections.ArrayList")

...它按预期工作(我们可以向它添加项目,获取计数等)。

最近我们安装了一台新的 Windows Server 2012 R2 机器(它具有 .NET 4.X 作为操作系统的一部分)。当我尝试在这台机器上运行相同的 VB6 二进制文件时,上面的行得到错误:

“自动化错误”

如果我添加对 C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.tlb 的引用,它仍然可以在我的本地开发机器上运行

dim x as New ArrayList
x.Add("test")
x.Count ' 1

...但在 2012 服务器上仍然出现自动化错误。

运行二进制文件 (LocalSystem) 的用户是否可能没有使用 DLL 的权限?我还尝试使用我在本地计算机上使用的域用户运行二进制文件。

为什么两台计算机/环境之间存在这种差异?

【问题讨论】:

  • 我想也许我只安装了 .NET 64 位,但我在这个目录中确实有几个版本:C:\Windows\Microsoft.NET\Framework
  • 有些人建议重新安装 .NET 2.0 或 3.X。但是当我尝试在 Server 2012 R2 上执行此操作时,我只收到一条错误消息,“...无法安装。无法通过 Windows 功能控制面板自动安装或卸载 Windows Server 角色和功能”(尽管事实上我正在手动运行安装程序。
  • 根据我的经验,这类问题与 app.config 文件有关。请参阅以下答案:stackoverflow.com/a/47867724/3929185stackoverflow.com/a/41142221/3929185。还可以使用 process hacker 或 procexp 并确定正在调用哪个 .net clr:blogs.msdn.microsoft.com/rodneyviana/2014/12/23/…
  • 听起来像是安装问题。尝试修复组件...比较以下注册表项,看看它们在您的工作机器上是否相同:HKLM\SOFTWARE\Classes\CLSID\{6896B49D-7AFB-34DC-934E-5ADD38EEEE39} 和 HKLM\SOFTWARE\Classes\ System.Collections.ArrayList
  • @froque app.config?这是一个VB6可执行文件,没有app.config。

标签: .net vb6 com-interop mscorlib


【解决方案1】:

.NET 4.X 似乎是随 Windows 一起安装的。 IT 人员使用“添加/删除 Windows 功能 UI”安装 .NET 2.x 和 3.x。我之前曾尝试使用失败的 Microsoft Web 安装程序安装它们。安装了 .NET 2.x 和 3.X 后,VB6 可执行文件现在可以正确实例化 System.Collections.ArrayList 库并且可以正常工作。我怀疑这意味着 .NET 4.x 不提供 COM 接口。

【讨论】:

    猜你喜欢
    • 2019-03-03
    • 2011-01-23
    • 2010-09-21
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多