Tw天前,我安装了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 \ bin \ fbclient.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
文件夹中包含的文件和文件夹:
plugins(文件夹包含engine12.dll)
fbclient.dll
ib_util.dll
icudt52.dll
icudt52l.dat
icuuc52.dll
答案 0 :(得分:0)
我只需要安装 Microsoft Visual C++ 2010 Redistributable。
我花了几个小时尝试和尝试很多东西,我找不到任何线索是什么导致它,即使通过深入调试 FD 源 (Delphi 10.4.2)。太糟糕了,任何地方都没有有用的错误消息。但是后来我使用了 SysInternals Process Explorer 并发现了这种依赖关系。感谢@Remy。 (在我的情况下,只是复制 msvcr100.dll 没有帮助。)
当然我不能说这是否对这里有帮助,但至少它可以帮助许多其他人。症状是一样的 - 它在 IDE(数据资源管理器)中有效,但在编译的应用程序中无效,即使 dll 在那里。
通过调试,我还验证了不仅要求 fbclient.dll,而且要求 fbembed.dll 的错误消息不是任何错误参数的迹象:如果第一个无法加载,它总是在寻找第二个(不仅是在没有找到的情况下)。