首頁 >後端開發 >C++ >如何以程式設計方式顯示我的應用程式的建置日期?

如何以程式設計方式顯示我的應用程式的建置日期?

Barbara Streisand
Barbara Streisand原創
2025-01-22 01:16:09997瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn