【问题标题】:If I compile a VB6 app on win7, ADODB.Connection errors with "Class does not support Automation or does not support expected interface"如果我在 win7 上编译 VB6 应用程序,ADODB.Connection 错误“类不支持自动化或不支持预期接口”
【发布时间】:2011-04-28 17:48:12
【问题描述】:

我在我的 Win7 x64 机器上编译了一些 VB6 代码,结果 .exe 将无法在任何其他机器上正确运行。

VB6 代码只是一个带有一个按钮的新模板 .exe 文件,对“Microsoft ActiveX 数据对象 2.6 库”的引用以及按钮按下事件中的以下代码:

Dim db
Set db = New ADODB.Connection

它在我的机器上正常运行,但没有其他机器(甚至是其他 Win7 x64 机器)(更新:我发现它运行的其他两个用户,其中一个是 Jeff Atwood!,但大多数机器都有同样的问题)

我检查了两台机器上的引用屏幕,看看引用是否失败(虽然它不会编译,但编译得很好)。一切看起来都是合法的。在 64 位机器上,引用进入 SysWow64 而不是 system32。

我什至已经在 Vista 64 位机器上成功编译了它并让它正常运行。它只是在 Windows 7 上编译,然后在发生错误的任何其他机器上运行。

这是在我的盒子上运行 CompChecker 的结果:

注册表信息:ADODB.Connection 具有 GUID HKEY_CLASSES_ROOT\CLSID{00000514-0000-0010-8000-00AA006D2EA4}

InprocServer32 是 %CommonProgramFiles%\System\ado\msado15.dll

【问题讨论】:

  • 我也有同样的问题。这曾经有效,必须是MS更新或什么的!
  • @Mark 那就给这个问题投票吧!
  • 奇怪的是它可以在 Vista 而不是 Windows 7 上运行。您是否尝试在禁用 UAC 或明确“以管理员身份运行”的情况下运行它?
  • @jeff Win2003 没有 UAC 或任何类似的东西......问题在于 win2k3 盒子。在win7上编译的应用程序在win7上运行良好。
  • 我认为这使用 "Mdac 2.7" ,不确定 Win 7 是否支持它,但如果它在 Vista 上,我也会假设为 7。

标签: vb.net automation 64-bit


【解决方案1】:

这是一个 Windows 7 SP1 问题。有关解决方法,请参阅 http://support.microsoft.com/kb/2517589

还有其他方法可以解决这个问题:

  1. 改用 ADO 2.8(来自 Win 7 RTM 磁盘)
  2. 使用后期绑定(可能是 最简单)
  3. 有一百万种东西 人们正在尝试这个很长时间 和愤怒的线程:Breaking change in MDAC ADODB COM components in Windows 7 Service Pack 1

另外,x64 Win 7 不支持 msado15.dll,如下所列:http://support.microsoft.com/kb/983246。页面很大,直接搜索msado15.dll即可。

【讨论】:

  • 太棒了。我使用 backcompat.tlb 解决方案在我的 windows 7 机器上进行编译,因为代码中有太多早期绑定引用,无法将它们更改为后期绑定。
  • @Michael Pryor:很高兴听到这个问题得到解决!那么,那美丽的赏金呢? :)
  • 还做不到。必须等待一个小时(自开始赏金以来必须是 24 小时)。如果我忘记了,无论如何你都会被系统自动获取。
【解决方案2】:

使用this tool检查两台机器上的MDAC组件的版本

还要确保您使用的是相同的 SQL Server(猜测)版本数据库,因为我注意到 SQL Server 2008 x64 的工作方式与处理连接的先前版本不同(使用 VB6 时)

【讨论】:

  • 我在问题中添加了更多细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 2015-01-14
  • 2012-02-24
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
相关资源
最近更新 更多