无法在 Windows 10 上加载 Firebird 客户端库

问题描述 投票:0回答:2

两天前,我安装了 Windows 10 build 1709 16299.192 和 Embarcadero Delphi 10.2.2 Tokyo。

自从我安装了它们以来,我的应用程序无法在运行时加载 Firebird 客户端库。

如果我有一个使用旧版 Windows 和 Delphi 10.2.2 编译的 exe 文件,它可以正常工作,但使用新 Windows 和 Delphi 编译的每个 exe 文件都无法运行。

如果我通过

TFDConnection
测试连接,它会成功连接,但是当我运行该应用程序时,我收到此错误:

[firedac][phys][fb]-314 无法加载供应商库 [c:\users\username\desktop\projectname in bclient.dll] 找不到指定的模块
提示:检查它是否在 PATH 或应用程序 EXE 目录中,并且具有 x86 位。

路径正确,客户端库适用于x86。在安装 Windows 10 build 1907 16299.192 之前,相同的应用程序可以运行。

我尝试了DevArt UniDac并编译为Win64,仍然有同样的问题。

重新安装Windows和Delphi 10.2.2(使用2个版本25.0.28979.1978和25.0.29039.2004进行测试)仍然没有帮助。

我认为这是一个权限问题,但我不知道如何解决。我授予了

bds.exe
所有组的所有权限,但仍然不起作用。

我的测试应用程序上只有这个代码

procedure TForm1.FormCreate(Sender: TObject);
var
  Path: string;
begin
  Path := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
  FDPhysFBDriverLink1.VendorHome := Path;
  FDPhysFBDriverLink1.VendorLib := 'fbclient.dll';
  FDConnection1.Params.Database := Path + 'FBDV3.0.FDB';
  FDConnection1.DriverName := 'FB';
  FDConnection1.Params.UserName := 'sysdba';
  FDConnection1.Params.Password := 'masterke';
  FDConnection1.LoginPrompt := False;
  FDConnection1.Connected := True;
end;

bin
文件夹中包含的文件和文件夹:

插件(文件夹包含engine12.dll)
fbclient.dll
ib_util.dll
icudt52.dll
icudt52l.dat
icuuc52.dll

delphi dll windows-10 firebird client-library
2个回答
2
投票

我只需安装 Microsoft Visual C++ 2010 Redistributable

我花了几个小时尝试了很多事情,即使通过深入调试 FD 源代码(Delphi 10.4.2),我也找不到任何导致它的线索。太糟糕了,没有任何有用的错误消息。但后来我使用 SysInternals Process Explorer 并发现了这种依赖关系。感谢@雷米。 (仅复制 msvcr100.dll 对我的情况没有帮助。)

当然我不能说这对这里是否有帮助,但至少它可以帮助许多其他人。症状是相同的 - 它在 IDE(数据浏览器)中工作,但在编译的应用程序中不起作用,即使 dll 在那里。

通过调试,我还验证了错误消息不仅要求 fbclient.dll,还要求 fbembed.dll,这并不是任何错误参数的标志:如果第一个参数无法加载(不是仅当未找到时)。


0
投票

非常感谢。你帮了我很多。这正是我的 FireDAC MySql 连接的问题。 64 位系统上的 32 位驱动程序、32 位应用程序。现已工作 12 年,在各种计算机上没有出现任何问题。但在一台计算机上我收到了与您完全相同的错误消息。看来这与 Firebird/MySql 无关,而与 FireDAC 更多。然而。安装 VC++ Redistributable 包立即解决了这个问题。谢谢!!!

© www.soinside.com 2019 - 2024. All rights reserved.