两天前,我安装了Windows 10版本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\bin\fbclient.dll]指定模块无法被找到提示:检查它是否在PATH或应用程序EXE目录中,并且具有x86位数。路径是正确的,并且客户端库是x86的。在安装Windows 10版本1907 16299.192之前,同样的应用程序可以工作。我尝试过DevArt UniDac并编译为Win64,仍然存在同样的问题。重新安装Windows和Delphi 10.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
文件夹中包含的文件和文件夹:
plugins(包含engine12.dll的文件夹)
fbclient.dll
ib_util.dll
icudt52.dll
icudt52l.dat
icuuc52.dll
TFDConnection
fbclient.dll
的位置,很可能fbclient.dll
本身依赖于另一个在搜索路径中缺失的DLL文件。使用SysInternals Process Monitor查看实际正在寻找哪些文件以及它们正在被搜索的位置。 - Remy LebeauVendorHome
,只需将VendorLib
设置为完全限定的库文件名。 - Victoriac:\users\username\desktop\projectname\bin\bin
而不是c:\users\username\desktop\projectname\bin
。这就解释了错误的原因。使用Process Monitor可以验证或否定这一点。像Victoria所说,只需删除VendorHome
赋值即可。 - Remy Lebeau