加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何自动化将构建日期定义为我的代码可见的常量?

发布时间:2020-12-15 10:14:56 所属栏目:大数据 来源:网络整理
导读:我想在我的代码中定义一个持有可执行文件构建日期的常量。我当然希望自动化这个过程。 我知道我可以使用例如Perl编写一个预构建脚本来写出包含日期的.inc文件。我更喜欢使用环境变量或构建变量的更轻量级的解决方案。 msbuild是否提供任何有助于帮助的变量?
我想在我的代码中定义一个持有可执行文件构建日期的常量。我当然希望自动化这个过程。

我知道我可以使用例如Perl编写一个预构建脚本来写出包含日期的.inc文件。我更喜欢使用环境变量或构建变量的更轻量级的解决方案。 msbuild是否提供任何有助于帮助的变量?有没有人知道这个问题的更好的解决方案?

解决方法

您可以从可执行文件的 PE header读取链接器时间戳:
uses
  ImageHlp;

function LinkerTimeStamp(const FileName: string): TDateTime; overload;
var
  LI: TLoadedImage;
begin
  Win32Check(MapAndLoad(PChar(FileName),nil,@LI,False,True));
  Result := LI.FileHeader.FileHeader.TimeDateStamp / SecsPerDay + UnixDateDelta;
  UnMapAndLoad(@LI);
end;

对于当前模块的加载映像,以下内容似乎有效:

function LinkerTimestamp: TDateTime; overload;
begin
  Result := PImageNtHeaders(HInstance + Cardinal(PImageDosHeader(HInstance)^._lfanew))^.FileHeader.TimeDateStamp / SecsPerDay + UnixDateDelta;
end;

Delphi的早期版本没有正确更新它,但它已经在Delphi 2010左右修复。对于早期版本,我在编译成功后自动更新了IDE plugin。

注意:该值存储为UTC,以便显示,您可能需要将其转换为适当的时区。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读