2012-07-16 4 views
0

Je dois récupérer des valeurs sous l'onglet Détails, par exemple, Version du fichier, Version du produit pour les fichiers .dll et .exe via C#. J'utilise le code suivant pour cela.FileVersionInfo récupération de la version de fichier incorrecte

 FileVersionInfo myFile = FileVersionInfo.GetVersionInfo('Name of the file'); 
    //File Version 
    string fileVersion = myFile.FileVersion; 

Le problème avec ce code est qu'il donne une version de fichier incorrecte pour certains fichiers. L'onglet Détails de ces fichiers affiche une version de fichier différente et le code récupère une valeur incorrecte. Je ne suis pas sûr de ce qui se passe.

Aidez-nous s'il vous plaît. Merci d'avance!!

+0

Pouvez-vous donner un exemple concret? Quelle était la version attendue (de l'explorateur) et quelle était celle que vous avez? –

+0

J'ai trouvé que les ordinateurs mentent rarement :) --- Assurez-vous absolument que vous regardez le même fichier et les valeurs que votre code récupère. –

+0

version attendue (de l'Explorateur) est 10.0.0.35 et j'ai eu 10.0.000.0035 j'ai vérifié plusieurs fois. Pour le même fichier, ce problème est survenu – Ozone

Répondre

1

version attendue (à partir d'Explorer) est 10.0.0.35 et je me suis 10.0.000.0035

C'est le même numéro. Le numéro de version du fichier apparaît dans la ressource native deux fois. Quelque chose que vous pouvez également voir lorsque vous modifiez une ressource de version dans un programme C++. Il y a une version lisible par l'homme sans aucune restriction sur le format. C'est ce que vous lisez, notez comment FileVersionInfo.FileVersion renvoie une chaîne .

Et il y a une version lisible par machine, un nombre de 64 bits. Avec 16 bits chacun pour les 4 parties. Quel est ce que l'explorateur lit. Les propriétés correspondantes sont FileMajorPart, FileMinorPart, FileBuildPart et FilePrivatePart. Notez comment ils retournent un int.

ProductVersion a aussi cela.

+0

Donc, pour voir si deux sont équivalents, on devrait dire 'var fichierVersionSeq = fileVersion.Split ('.'). ushort.Parse); 'puis utilisez [' SequenceEqual'] (http://msdn.microsoft.com/en-us/library/bb348567.aspx) pour vérifier tous les composants par rapport à l'autre séquence? –

+0

Pourquoi n'utilisez-vous pas simplement les propriétés int au lieu d'essayer de l'analyser? L'analyse peut échouer. –

+0

Bonne idée. Puis, en allant dans l'autre sens: 'chaîne versionStringWithoutLeadingZeros = chaîne.Join (". ", MyFile.FileMajorPart, myFile.FileMinorPart, myFile.FileBuildPart, myFile.FilePrivatePart);' –

Questions connexes