2 votes

Numéros de version EXE -- comment comparer correctement les versions mineures

Les fichiers EXE de Windows sont associés à des numéros de version, composés de quatre chiffres séparés par des points (par exemple, 1.0.0.0).

Question : Quelle est la manière correcte de comparer ces chiffres ? En particulier, est-ce que 1.15.0.0 > 1.2.0.0 (puisque 15 > 2) ou vice versa (puisque, mathématiquement, 1.15 < 1.2) ?


Historique : Une de mes applications a atteint la version 3.9.* et je voudrais savoir si je peux continuer avec la 3.10.* sans que les installateurs ou autres composants qui comparent les numéros de version ne causent de problèmes.

3voto

Mitch Wheat Points 169614

La bonne façon de procéder est de considérer chaque composant (délimité par des points '.') à son tour comme une numérique plutôt que chaîne de caractères valeur. Donc, oui 1.15.0.0 est > 1.2.0.0

Si vous utilisez Powershell, il dispose d'un objet version intégré (basé sur l'objet version de .NET). System.Version type) : [version] qui exécutera cette fonctionnalité pour vous.

[Pour référence, les différents composants sont Major.Minor.Build.Revision ]

1voto

Comme indiqué dans MSDN à cette page :

Le site version consiste en deux nombres entiers de 32 bits, définis par quatre nombres de 16 bits entiers de 16 bits.

Cela signifie qu'avec deux versions au format "Major.Minor.Release.Build", vous pouvez être sûr de disposer de suffisamment de données pour les assembler en valeurs entières non signées de 64 bits comme ceci :

int64_t i1 = (v1->Major << 48) | (v1->Minor << 32) | (v1->Release << 16) | v1->Build;
int64_t i2 = (v2->Major << 48) | (v2->Minor << 32) | (v2->Release << 16) | v2->Build;

Vous pouvez donc maintenant comparer deux valeurs de 64 bits comme suit :

if (i1 > i2) { ... }

Désolé de l'avoir résolu après 5 ans, mais je me promenais...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X