【发布时间】:2018-06-25 13:38:11
【问题描述】:
两天前,我安装了 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(使用 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
【问题讨论】:
-
这不是权限问题。该错误意味着找不到所需的 DLL。而且由于您明确告诉
TFDConnectionfbclient.dll的位置,fbclient.dll本身很可能依赖于搜索路径中缺少的另一个 DLL。使用 SysInternals Process Monitor 查看实际正在查找哪些文件,以及正在搜索它们的位置。 -
不要将
VendorHome设置为VendorLib为fully qualified library file name。 -
@Martin 密码正确 Firebird 密码只有 8 个字母,所以即使你写了 'Y' 也会被忽略。
-
FDPhysFBDriverLink behaving weirdly with VendorLib Path 的可能重复项:“驱动程序不断将“\bin\”添加到我的 VendorHome 路径的末尾”,因此可能正在寻找其他 DLL在
c:\users\username\desktop\projectname\bin\bin中,而不是在c:\users\username\desktop\projectname\bin中。这将解释错误。 Process Monitor 将以一种或另一种方式验证/拒绝该方法。就像维多利亚说的,只需删除VendorHome分配 -
不要将任何内容复制到 system32 中,也不要修改程序文件的安全设置。停止随意尝试可能会损坏您的机器的疯狂东西。在尝试解决问题之前先诊断问题。
标签: delphi dll windows-10 firebird client-library