-1

我正在使用下面的函数从当前的 EXE 文件中获取版本信息。

问题是,在应用 Delphi 11 的 November Patch 后,该功能开始使应用程序崩溃。

我的代码在下面列出。崩溃的行是这样的:

VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);

这是错误,在此之后应用程序关闭。在补丁之前,同样的功能没有问题。也许是一个错误的更新?

在此处输入图像描述

  function TForm1.version : string;
  var
    VerInfoSize: DWord;
    VerInfo: Pointer;
    VerValueSize: DWord;
    VerValue: PVSFixedFileInfo;
    Dummy: DWord;
    sfilename: string;
  begin
    sfilename := paramstr(0);
    VerInfoSize := GetFileVersionInfoSize(pchar(sfilename), Dummy);
    GetMem(VerInfo, VerInfoSize);
    GetFileVersionInfo(pchar(sfilename), 0, VerInfoSize, VerInfo);
    VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
    with VerValue^ do
    begin
      Result := inttostr(dwFileVersionMS shr 16);
      Result := Result + '.' + inttostr(dwFileVersionMS and $FFFF);
      Result := Result + '.' + inttostr(dwFileVersionLS shr 16);
      Result := Result + '.' + inttostr(dwFileVersionLS and $FFFF);
    end;
    FreeMem(VerInfo, VerInfoSize);
  end;
4

1 回答 1

-2

实际上问题是EXE文件没有任何版本信息,并且生成了异常并且我没有处理它。

以下答案的代码有效:

GetFileVersionInfoSize 和 GetFileVersionInfo 不返回任何内容

于 2021-11-29T13:04:12.473 回答