在我的电脑上找到 libpq.dll 版本 运行 以针对 Postgres 数据库进行编译

Find libpq.dll version running on my pc for compiling against Postgres database

我刚刚针对 Postgres 11.8 数据库编译了一个使用 DELPHI (XE6) 运行 开发的可执行文件 table 的新版本。 为了分发它,我相信我必须分发与程序编译时相同的 libpq.dll 版本,而且看起来很简单,这就是我的问题,在 libpq.dll 的许多版本中我的电脑里有我不知道 Delphi 在本地 运行 并用它编译的实际是什么。

我试图在以前的分发上只分发新版本的 .exe 文件(试图 运行 反对旧版本的 libpq.dll),但它没有工作(抛出一个尝试打开第一个数据库时出错 table)

故事是我是这个程序的新手(还有 Delphi);该程序的早期版本分布在许多 PC 上并且运行良好,我只是想分发在我的 PC 上运行良好的新版本。我在服务器上安装了11.8版本的postgres(从9.5开始),数据库实现后分布在所有PC上的程序都运行正常。

提前致谢,欢迎任何帮助。

您可以使用 ProcessExplorer.

找到您的 Delphi 应用程序加载的 libpd.dll 版本

运行 您的程序,连接到数据库以确保加载了 DLL。然后 运行 ProcessExplorer,在列表中找到您的应用程序,select 它。然后使用该工具显示您的应用程序加载的所有 DLL。在列表中找到 libpq.dll 并右键单击属性。你会得到你想要的信息。

顺便说一句:您还可以使用ProcessMonitor 来跟踪加载了哪个DLL,发现他的路径然后查看属性。

获取 dll 版本的一种方法是从其版本资源中获取它,如下所示:

function GetDLLVersion(const FullPathToDLL:string):string;
const
  dSize=0;
var
  d:array[0..dSize-1] of byte;
  p:PVSFixedFileInfo;
  l:cardinal;
begin
  if GetFileVersionInfo(PChar(FullPathToDLL),0,dSize,@d[0]) then
    if VerQueryValue(@d[0],'\',pointer(p),l) then
      Result:=Format('%d.%d.%d.%d',[
        p.dwProductVersionMS shr 16,
        p.dwProductVersionMS and $FFFF,
        p.dwFileVersionLS shr 16,
        p.dwFileVersionLS and $FFFF]);
end;