2009-08-12 4 views
1

Je veux utiliser python pour obtenir la version du fichier exécuté, et je sais que pefile.pycomment puis-je utiliser le « pefile.py » pour obtenir le fichier (.exe) La version

comment utiliser pour le faire?

notes: le fichier exécuté peut ne pas être complètement.

+1

Voici appartiennent à stackoverflow –

+2

Bienvenue sur stackoverflow. Cette question est maintenant devenue une dupe de http://stackoverflow.com/questions/1264472/using-the-pefile-py-to-get-file-exe-version – innaM

Répondre

2

Je ne suis pas sûr que je comprends votre problème correctement, mais si c'est quelque chose le long des lignes de l'utilisation Pefile pour récupérer la version d'un exécutable fourni, alors peut-être (tiré de [tutoriel] [1])

import pefile 
pe = pefile.PE("/path/to/pefile.exe") 
print pe.dump_info() 

vous fournira les informations de version. Je n'ai aucune idée de la façon dont pefile est sensible lors de l'analyse des fichiers incomplets, mais conjecturer que les informations de version sont quelque part dans l'en-tête et que pefile utilise un générateur pour lire le fichier, alors il devrait être possible de lire.

4

C'est la meilleure réponse que je pense que vous pouvez trouver:

import pefile 
pe = pefile.PE("/path/to/something.exe") 

print hex(pe.VS_VERSIONINFO.Length) 
print hex(pe.VS_VERSIONINFO.Type) 
print hex(pe.VS_VERSIONINFO.ValueLength) 
print hex(pe.VS_FIXEDFILEINFO.Signature) 
print hex(pe.VS_FIXEDFILEINFO.FileFlags) 
print hex(pe.VS_FIXEDFILEINFO.FileOS) 
for fileinfo in pe.FileInfo: 
    if fileinfo.Key == 'StringFileInfo': 
    for st in fileinfo.StringTable: 
     for entry in st.entries.items(): 
     print '%s: %s' % (entry[0], entry[1])  
    if fileinfo.Key == 'VarFileInfo': 
    for var in fileinfo.Var: 
     print '%s: %s' % var.entry.items()[0] 

From Ero Carrera's (the author of pefile.py) own blog

+1

J'ai essayé ceci sur un binaire NSIS-Installer sans succès ('fileinfo.StringTable' n'a pas été défini). [J'ai trouvé une solution] (http://stackoverflow.com/a/16076661/274483) en utilisant les attributs 'pe.VS_FIXEDFILEINFO.ProductVersionMS',' pe.VS_FIXEDFILEINFO.ProductVersionLS'. – flocki

Questions connexes