ホームページ > バックエンド開発 > C++ > アプリケーションのビルド日をプログラムで表示するにはどうすればよいですか?

アプリケーションのビルド日をプログラムで表示するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-22 01:16:09
オリジナル
988 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート