首页 > 后端开发 > C++ > 如何以编程方式显示我的应用程序的构建日期?

如何以编程方式显示我的应用程序的构建日期?

Barbara Streisand
发布: 2025-01-22 01:16:09
原创
995 人浏览过

How Can I Programmatically Display My Application's Build Date?

显示构建日期:完整指南

确定应用程序的构建日期对于用户判断他们是否拥有最新版本至关重要。虽然显示构建编号很常见,但它通常提供的信息很少。本文探讨了以编程方式提取构建日期并以用户友好的格式显示它的方法。

获取构建日期

与构建编号不同,没有直接的方法可以从程序集元数据中检索构建日期。但是,一种可靠的方法是提取嵌入到可执行文件的 PE 头中的链接器时间戳。以下 C# 代码演示了此技术:

<code class="language-c#">public static DateTime GetLinkerTime(this Assembly assembly, TimeZoneInfo target = null)
{
    var filePath = assembly.Location;
    const int c_PeHeaderOffset = 60;
    const int c_LinkerTimestampOffset = 8;

    var buffer = new byte[2048];

    using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        stream.Read(buffer, 0, 2048);

    var offset = BitConverter.ToInt32(buffer, c_PeHeaderOffset);
    var secondsSince1970 = BitConverter.ToInt32(buffer, offset + c_LinkerTimestampOffset);
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

    var linkTimeUtc = epoch.AddSeconds(secondsSince1970);

    var tz = target ?? TimeZoneInfo.Local;
    var localTime = TimeZoneInfo.ConvertTimeFromUtc(linkTimeUtc, tz);

    return localTime;
}</code>
登录后复制

使用示例

要使用此方法,只需在正在执行的程序集上调用 GetLinkerTime():

<code class="language-c#">var linkTimeLocal = Assembly.GetExecutingAssembly().GetLinkerTime();</code>
登录后复制

关于 .NET Core 的说明

请注意,此方法在 .NET Core 1.1 之后无法正常工作。 提取的链接器时间戳将在 1900-2020 年范围内提供随机年份。

以上是如何以编程方式显示我的应用程序的构建日期?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板