2009-11-23 63 views
4

我希望能够在Delphi 2009程序中显示程序编译的日期和时间。如何在Delphi中获得编译日期和时间

有没有简单的方法来做到这一点?

+0

Duplicate:http://stackoverflow.com/questions/8437300 – Kromster 2017-05-03 07:33:17

+0

@Kromster - 我在2009年问了这个问题。另一个问题在2011年问了。因此,另一个问题是我的副本。 – lkessler 2017-05-03 13:43:07

+0

我也这么认为,但另一个问题有更好的答案。所以我发布了这个评论来引导这个问题的观众回答这些问题。我没有投下closevote。 – Kromster 2017-05-04 06:08:04

回答

5

一个明显的选择可能是使用exe的最后修改日期,但这可以更改。

您可以在版本信息中包含编译时间戳并读取该资源。我似乎记得一个IDE插件可以为你做这件事,但不是哪一件。您可以阅读timestamp from the PE header

4

我也使用PE标头时间戳。问题在于(至少在旧版本中),Delphi没有正确更新它。我不确定这是否已在Delphi 2010中修复。我编写了一个IDE插件,在每次编译后自动更新PE标头。你可以从CodeCentral获得:19823 Update PE header TimeDateStamp value after compilation

9

至少从Delphi 2007开始,应写入PE标题中的链接器时间戳。 (在旧版本一样德尔福5 PE头中的时间戳是一件于1992年,真正的时间戳只能在资源中找到)

如果您已经使用了JCL然后从JclPEImage.pas SVN View

尝试PeReadLinkerTimeStamp
+0

'IMAGE_FILE_HEADER.DateTimeStamp = 0x2A425E19'(6/19/1992 10:22:17 PM)我不知道为什么,就是这样。 – 2011-10-31 19:08:58

2

我使用了一个简单的IDE加载项,我写这个加载项来遍历项目中的所有源文件,并编写包含最新修改时间的.INC文件。这是作为“编译前”操作自动完成的。我发现它比简单的“最后编译”日期更有用,因为它更准确地反映了项目上次更改的时间。而且由于我们应用程序中的所有项目都在FinalBuilder中编译,因此每次构建时,“最后编译”时间都会导致大量类似的时间戳,这意味着不太感兴趣。唯一的缺点是这种机制不会记录我们的不属于任何项目的实用功能库;但他们并不经常改变。但是,如果您确实只需要编译日期,则可以使用类似的IDE加载项来完成此操作。