Code: Alles auswählen
def getFileVerInfo( FileName, DescItems ):
"""
Liefert VersionsInformationen die in EXE- und DLL-Dateien, sofern vorhanden, zurück
DescItems ist eine Liste mit Eintragsnamen.
Bsp:
DescItems = ["CompanyName", "FileDescription", "FileVersion", "InternalName"]
"""
def getInfo( InfoStr, RAWdata ):
Info = re.findall( InfoStr+"(.+?)\x01", RAWdata )
if Info == []:
return None
else:
return Info[0][:-2]
FileHandle = open( FileName, "rb" )
RAWdata = FileHandle.read().replace("\x00","")
FileHandle.close()
POS = RAWdata.rfind( "StringFileInfo" )
if POS == -1:
# Wenn "StringFileInfo" nicht gefunden wird, sind
# auch keine Datei-Informationen vorhanden
return
EndPOS = RAWdata.rfind( "VarFileInfo" )
if EndPOS == -1:
# "VarFileInfo" kommt nicht in allen Dateien vor, also
# werden einfach eine Hand voll Zeichensalat untersucht
EndPOS = POS+500
RAWdata = RAWdata[ POS:EndPOS ]
FileInfo = {}
for Item in DescItems:
FileInfo[Item] = getInfo( Item, RAWdata )
return FileInfo
Es werden alle *.exe und *.dll Dateien auf C:\ mit den VersionsInformationen aufgelistet.
Code: Alles auswählen
Endungen = [".exe",".dll"]
DescItems = ["CompanyName", "FileDescription", "FileVersion", "InternalName"]
for Verz, VerzList, DateiListe in os.walk("C:\\"):
for Datei in DateiListe:
FileExt = os.path.splitext(Datei)[1]
if FileExt in Endungen:
Datei = Verz+os.sep+Datei
print "\n>",Datei
FileInfo = getFileVerInfo( Datei, DescItems )
if FileInfo:
for i in FileInfo:
print i,"-", FileInfo[i]
else:
print "- Keine DateiInformation vorhanden -"
Code: Alles auswählen
> C:\Programme\Gemeinsame Dateien\InstallShield\Driver\7\Intel 32\IScript7.dll
InternalName - Engine
FileDescription - InstallShield (R) Script Engine
FileVersion - 7,07, 0, 262
CompanyName - InstallShield Software Corporation
EDIT: Anmerkung, es gibt auch win32api.GetFileVersionInfo
