无法在Windows 10

时间:2018-01-16 19:02:27

标签: delphi dll windows-10 firebird client-library

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

1 个答案:

答案 0 :(得分:0)

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

我花了几个小时尝试和尝试很多东西,我找不到任何线索是什么导致它,即使通过深入调试 FD 源 (Delphi 10.4.2)。太糟糕了,任何地方都没有有用的错误消息。但是后来我使用了 SysInternals Process Explorer 并发现了这种依赖关系。感谢@Remy。 (在我的情况下,只是复制 msvcr100.dll 没有帮助。)

当然我不能说这是否对这里有帮助,但至少它可以帮助许多其他人。症状是一样的 - 它在 IDE(数据资源管理器)中有效,但在编译的应用程序中无效,即使 dll 在那里。

通过调试,我还验证了不仅要求 fbclient.dll,而且要求 fbembed.dll 的错误消息不是任何错误参数的迹象:如果第一个无法加载,它总是在寻找第二个(不仅是在没有找到的情况下)。