Das deutsche Python-Forum

Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Fr Sep 03, 2010 02:08

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Windows: VersionsInformationen aus EXE und DLL Files lesen
BeitragVerfasst: Mi Nov 24, 2004 21:06 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Extrahiert die Versions Informationen aus ausführbaren Windows-Programmen.

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


Beispielanwendung
Es werden alle *.exe und *.dll Dateien auf C:\ mit den VersionsInformationen aufgelistet.

Code:
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 -"


Beispiel-Ausgabe (nur eine Datei):

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


"Entwicklungsgeschichte" hier: http://python.sandtner.org/viewtopic.php?t=2287

EDIT: Anmerkung, es gibt auch win32api.GetFileVersionInfo ;)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Windows: VersionsInformationen aus EXE und DLL Files les
BeitragVerfasst: Do Nov 08, 2007 12:16 
Moderator
Benutzeravatar

Registriert: Sa Feb 28, 2004 23:04
Beiträge: 5548
Wohnort: Oberhofen im Inntal (Tirol)
jens hat geschrieben:

Der neue Link lautet: http://www.python-forum.de/viewtopic.php?t=2287

_________________
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de