从 Delphi 11 应用十一月补丁后崩溃的 EXE 文件中获取版本信息

Get version info from EXE file crashing on Delphi 11 after applying November Patch

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

问题是,在应用 Delphi 11 月补丁后,该函数开始使应用程序崩溃。

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

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;

其实问题是EXE文件没有任何版本信息,产生了异常,我没有处理。

下面答案的代码有效:

GetFileVersionInfoSize And GetFileVersionInfo return nothing