【问题标题】:Get File Version for Delphi XE2 and later获取 Delphi XE2 及更高版本的文件版本
【发布时间】:2014-12-04 23:10:43
【问题描述】:

我正在将程序从 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.0.0 吗?顺便提一句。您绝对应该添加一些错误检查。
  • 您发布的代码在 XE6 中的新 VCL 应用程序中运行良好。在表单上放置一个标签,转到项目选项并设置构建的版本信息,使用这两行(以及适当的变量声明)为 FormShow 添加一个处理程序: GetBuildInfo(Major, Minor, Rev, Build); Label1.Caption := Format('%d.%d.%d.%d', [Major, Minor, Rev, Build]); Project->Build(获取添加的版本信息,并运行应用程序。在我的情况下,我将版本设置为 4.3.2.1,标签显示4.3.2.1。
  • 代码在所有版本的 Delphi 上工作方式完全相同。缺少错误检查并不理想。
  • RTL 映射 Win32 API 函数以匹配用于 (P)Char 的数据类型。因此,GetFileVersionInfoSize() 和 GetFileVersionInfo() 实际上在 Delphi 2007 和更早版本中映射到 GetFileVersionInfoSizeA() 和 GetFileVersionInfoA(),在 Delphi 2009 和更高版本中映射到 GetFileVersionInfoSizeW() 和 GetFileVersionInfoW()。这就是为什么此代码无需任何修改即可在每个 Delphi 版本中运行的原因。
  • 个人在获取调用app自己的版本号时,我更喜欢直接加载版本资源,而不是使用GetFileVersionInfo():stackoverflow.com/a/13942403/65863

标签: delphi unicode delphi-2010 delphi-xe7


【解决方案1】:

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

换句话说,通过查看此代码不会发现您的问题。通过找出您在编译时没有设法设置您想要的版本信息的原因,可以找到您的问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多