【问题标题】:Strange problem in VB6 in generation of executableVB6生成可执行文件的奇怪问题
【发布时间】:2011-02-23 18:40:19
【问题描述】:

我在那里

我有这种情况:

a) 笔记本:Windows Server 2008 R1, Visual basic 6 with all service pack。

b) 桌面:Windows Server 2008 R1(最近更新到 sp1,我不知道是不是有罪),带有所有服务包的 Visual basic 6。

c) 客户端计算机 (Windows XP)

我在 a) 中创建了一个可执行文件并将其安装在 c) 中。它使用 ADO (msado15.dll),在 a) 和 C)

中都能正常工作

然后,使用相同的代码,我尝试在 b) 中执行相同的操作(在 b) 中编译)并且它在 b) 中工作 strong> 但在 c) 中失败。我验证了 a) 和 b)

中的代码相同

在简历中:

一台机器

  • executable_compiled_in_a.exe 工作
  • executable_compiled_in_b.exe 工作

B机

  • executable_compiled_in_a.exe 工作
  • executable_compiled_in_b.exe 工作

C机(客户机)

  • executable_compiled_in_a.exe 工作
  • executable_compiled_in_b.exe 失败!

错误信息是

类不支持自动化或不支持预期的接口

并被线路触发

Set Data = New ADODB.Connection

所以,我不明白有什么问题,两者都使用相同的引用,但 b) 生成了不同的可执行文件。

ps:MSDAC_TYP 在 XP 中不起作用,这不是 MSDAC 的问题,因为在 a) 中生成的可执行文件在 c) 中起作用。

ps2:我也尝试使用 msado27.tlb 和 msado28.tlb,结果相同。

ps3:我的开发机器(a)和b)是64位,而客户机器是32位。

谢谢。

更新

Windows Server 2008 R1 的最新服务(我认为 Windows 7 也是如此)更新了 ADO 的版本和可执行文件。小故事,最新的SP1是邪恶的,会带来很多麻烦,至少对ADO和开发机器来说是这样。

没有服务包 6.1.7600 的 msado15.dll

带有 Service Pack 6.1 的 msado15.dll。7601

【问题讨论】:

  • MDAC 在 XP SP1 之前是带外组件。也就是说,更高版本的服务包(或操作系统版本)已预先安装并通过 Windows 更新自动升级。这意味着您不能再通过可再发行的 exe安装它。
  • 我刚刚提到 mdac 是无效的解决方案,因为它是通用解决方案,即使它仅适用于 Windows XP 之前的机器。

标签: vb6 ado


【解决方案1】:

在您客户的机器上安装kb983246。另一种解决方法是使用 ADO 旧类型库,但它在 64 位机器上存在 kb983246 中描述的问题。

【讨论】:

  • 谢谢,但遗憾的是最容易卸载 sp1 而不是更新所有客户端。
【解决方案2】:

所有类型库都引用 msado15.dll,它本身包含它所属的 MDAC/WDAC 版本的类型库。每个类型库都描述了不同的 ADO 接口版本。

通常您应该使用您的应用程序所需的最新版本,而不是更新版本。这为您提供了最广泛的兼容性。对于很多应用程序来说,这意味着 2.5,尽管以后的 SQL Server 支持可能需要 2.7 或 2.8,并且您可以在 2.6 中执行一些 2.5 中没有的操作。

不要盲目使用最新的可用界面。

然而,很少有 XP 机器没有安装 2.8。这可能就是 MDAC_TYP 对您“不起作用”的原因。

我只能猜测有人破坏了您的一台或两台 Server 2008 机器上的 DAC 软件堆栈。可能是通过安装禁用 UAC 的垃圾软件,绕过 WRP。或者更糟糕的是使用机器的内置管理员帐户。

否则,在其中任何一个上针对“msado15.dll”(即 ADO 6.x)编译的程序根本无法在 XP 机器上运行。

您将 Server 2008 作为桌面操作系统运行这一事实在此敲响了警钟。

【讨论】:

  • 我在那里:我尝试使用较旧的 mdac,结果相同。无论如何,作为一名开发人员,我一定不会害怕在没有 UAC 或直接在 windows server 机器上工作,事实上,我直接在 windows server 上工作的原因是因为你确保你的软件可以在 windows server 中正常工作(IIS ),甚至为 IIS 项目工作的每个开发人员都必须这样做(特别是对于 Sharepoint)。无论如何,MDAC/WDAC在每台机器上都工作,它可以连接到sql并完成所有任务,只是在特定机器上编译和在另一台机器上使用的组合不能正常工作。
【解决方案3】:

将 masado28.tlb 从具有 SP1 的开发人员计算机上的 pre-SP1 计算机复制到某个文件夹(例如,复制到 %CommonProgramFiles%\System\ado\PRESP1)。使用 Adminstrative 权限打开 regedit,找到所有值 msado28.tlb 并将所有值“%CommonProgramFiles%\System\ado\msado28.tlb”替换为“%CommonProgramFiles%\System\ado\PRESP1\msado28.tlb”。在更改之前为管理员设置权限“完全访问”键。在 VB 项目引用中使用“Microsoft ActiveX DataObjects 2.8 库”,在位置:您将看到 C:\Program Files(x86)\Common Files\System\ado\PRESP1\msado28.tlb。现在您可以重新编译您的 VB 应用程序,并且您的可执行文件必须在所有 mashine 上无错误地运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2020-12-16
    • 2021-06-22
    相关资源
    最近更新 更多