【问题标题】:How Can I Get the Compile Date and Time in Delphi如何在 Delphi 中获取编译日期和时间
【发布时间】:2010-12-19 09:09:27
【问题描述】:

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

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

【问题讨论】:

  • @Kromster - 我在 2009 年问过这个问题。另一个问题是在 2011 年问的。因此另一个问题与我的重复。
  • 我也这么认为,但另一个问题的答案要好得多。因此,我发布了评论,将这个问题的观众引导到这些答案。我没有投票。

标签: delphi compilation


【解决方案1】:

至少从 Delphi 2007 开始,PE Header 中的链接器时间戳应该被写入。 (在像 Delphi 5 这样的旧版本中,PE 标头中的时间戳是 1992 年的东西,真正的时间戳只能在资源中找到)

如果您已经使用 JCL,请尝试 JclPEImage.pas 中的 PeReadLinkerTimeStamp SVN View

【讨论】:

  • IMAGE_FILE_HEADER.DateTimeStamp = 0x2A425E19 (6/19/1992 10:22:17 PM) 我不知道为什么,就是这样。
【解决方案2】:

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

您可以在版本信息中包含编译时间戳并读取该资源。我似乎记得有一个 IDE 插件可以为您执行此操作,但不记得是哪个。

或者你可以阅读timestamp from the PE header

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-27
        • 2010-09-29
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多