Maison >développement back-end >C++ >Comment puis-je afficher par programme la date de construction de mon application ?

Comment puis-je afficher par programme la date de construction de mon application ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-22 01:16:09995parcourir

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

Afficher la date de construction : guide complet

La détermination de la date de build de votre application est essentielle pour que les utilisateurs puissent déterminer s'ils disposent de la dernière version. Bien que l’affichage du numéro de build soit courant, il fournit généralement peu d’informations. Cet article explore les moyens d'extraire par programme la date de construction et de l'afficher dans un format convivial.

Obtenir la date de construction

Contrairement au numéro de build, il n'existe aucun moyen direct de récupérer la date de build à partir des métadonnées de l'assembly. Cependant, une méthode fiable consiste à extraire l’horodatage de l’éditeur de liens intégré dans l’en-tête PE de l’exécutable. Le code C# suivant illustre cette technique :

<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>

Exemples d'utilisation

Pour utiliser cette méthode, appelez simplement GetLinkerTime() sur l'assembly en cours d'exécution :

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

Instructions sur .NET Core

Veuillez noter que cette méthode ne fonctionnera pas correctement après .NET Core 1.1. L'horodatage de l'éditeur de liens extrait fournira une année aléatoire comprise entre 1900 et 2020.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn