在Windows 7中让VB6 ADO应用程序正常工作

12

我继承了几个旧的VB6应用程序,目前无法重写为.NET。所有这些旧应用程序都使用ADO,并且在我的XP机器上编译良好。自从切换到Windows 7机器后,这些应用程序编译正常,但在部署到XP机器上时,会出现错误。这是一个已知问题,在这篇Microsoft文章中进行了讨论:

http://support.microsoft.com/kb/2517589

该文章详细解释了一种解决方法,其中涉及复制“.TLB”文件并使用“regtlibv12”注册它。当我尝试注册时,出现以下错误信息:

RegisterTypeLib of C:\Program Files\Common Files\System\ado\msado60_Backcompat.tlb failed : 80029c4a

我还尝试在Windows文件夹中使用旧的“regtlib.exe”注册,但出现以下错误:

LoadTypeLib of C:\Program Files\Common Files\System\ado\msado60_Backcompat.tlb failed : 80029c4a

由于这个原因,我无法继续使用这个解决方法。非常感谢任何人能够给我指导,如何正确地注册此文件。

预先感谢!


4
我讨厌这个问题。目前我仅仅使用一个虚拟的Windows XP机器来编译与ADO相关的东西。 - GSerg
1
请检查事件日志,查找 regtlibv12 命令失败的原因。另外,请确认您是否以管理员身份启动了 cmd 窗口? - jac
这个问题困扰了我很长时间,知道有其他人也遇到了这个问题真是太好了! - Jamie Keeling
3个回答

13

将 .TLB 文件放置在适当的位置,例如

C:\Program Files\Common Files\System\ado

接下来在 VB6 IDE(已提升权限,即管理员身份)中打开一个新项目。选择“项目 | 引用…”,然后单击“浏览”按钮。导航到新的.TLB文件并打开它。选中该项并关闭“引用”对话框。

现在应该已经注册成功了。

如果情况比较紧急,请尝试使用 VB 类型库注册工具


很好的建议,Bob。 我成功地在我的项目中添加了参考。 但是,它并没有为其他项目“注册”它 - 我不得不手动将其添加到每个项目中。 这比我的以前的解决方案(使用XP虚拟机构建应用程序)好10倍。 非常感谢你的解决方案! - Loki70
前往 C:\Program Files (x86)\Microsoft Visual Studio\VB98,右键点击 VB6.EXE。选择 以管理员身份运行。重复答案中的步骤以永久注册 TLB。 - wqw
wqw - 你的建议很有效。一旦我按照你的步骤操作,TLB似乎已经被永久注册了。非常感谢你! - Loki70
1
是的,wqw建议的就是以提升权限运行某个程序的意思。顺便说一下,VB6.exe应该始终以提升权限运行,以确保可靠操作,因为它需要调试权限并在您工作时注册一些内容。要实现这一点,您可以向其添加一个提升权限清单,或者导航到VB6.exe,右键单击,在属性对话框的兼容性选项卡上勾选“以管理员身份运行此程序”。 - Bob77
请查看此处的答案(https://dev59.com/l2w05IYBdhLWcg3wykzn#9824958)获取更新的解决方案,Microsoft已删除了被接受答案推荐的解决方法。 - Patrick McDonald

8
您可能已经下载了文件C:\temp\Msado60_Backcompat_i386.tlb,但没有重命名它。示例是为了注册C:\temp\Msado60_Backcompat.tlb(请注意,没有_i386)。
请使用正确的文件名运行该命令。

1
好的观点 - 我在下载文件后没有重命名它,而且说明中提到要在没有“_i386”的情况下注册它。现在我已经让它工作了,我不打算撤销任何东西,但这是一个很好的建议。 - Loki70

3

为了更新此答案列表,基于最近的信息,微软发布了KB 2640696,以更直接的方式解决了这个问题。这个补丁使得在构建机器上部署变得更加容易,并解决了下一级操作系统的问题。

有关该补丁的更完整信息,请参见以下博客文章


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接