获取Delphi XE2及更高版本的文件版本

时间:2014-12-04 23:10:44

标签: delphi unicode delphi-2010 delphi-xe7

我正在从Delphi 2010将程序更新到Delphi XE7。由于我认为需要适应unicode并使用GetFileVersionInfoW而不是GetFileVersionInfoSize,所以下面显示的代码已停止工作。

是否有人开发了我正在使用的功能的更新版本?到目前为止,我无法在网络上找到任何示例,我担心低级别的Windows编程有点超出我的范围。

感谢您的帮助!

以下旧代码不再适用于Delphi XE2及更高版本:只返回1.0.0.0

procedure GetBuildInfo(var V1, V2, V3, V4: Word);
{From Steve Schafer }
var
  VerInfoSize: DWORD;
  VerInfo: pointer;
  VerValueSize: DWORD;
  VerValue: PVSFixedFileInfo;
  Dummy: DWORD;

begin
  VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
  GetMem(VerInfo, VerInfoSize);
  GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
  VerQueryValue(VerInfo, '\', pointer(VerValue), VerValueSize);
  with VerValue^ do
    begin
      V1 := dwFileVersionMS shr 16;
      V2 := dwFileVersionMS and $FFFF;
      V3 := dwFileVersionLS shr 16;
      V4 := dwFileVersionLS and $FFFF;
    end;
  FreeMem(VerInfo, VerInfoSize);
end;

1 个答案:

答案 0 :(得分:3)

当所有版本的Delphi编译时,您的代码运行良好。因此,唯一合乎逻辑的结论是,代码报告版本1.0.0.0的原因是版本为1.0.0.0

换句话说,通过查看此代码无法找到您的问题。您可以通过找出为什么在编译时无法设置版本信息来找到问题。

可能还值得指出的是,您的代码不会尝试检查错误的返回值。