Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mo 27.06.11 16:19 
Hallo,

ich habe einige ZIP Dateien, welche DLLs enthalten. Jetzt möchte ich, ohne die DLLs auf der Festplatte abzulegen, herausfinden welche Dateiversion diese DLLs haben.

Wenn ich die Dateien auf der Platte hätte, könnte ich mit einer Kombination aus GetFileVersionInfo und VerQueryValue arbeiten. Da ich aber die Dateien direkt in einen (Memory)Stream entpacken lasse, klappt es so nicht. Habt ihr eine Idee, wie ich an die Informationen komme ohne Temporäre Dateien anlegen zu müssen?

Gruß
Klabautermann
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 27.06.11 17:01 
AFAIK bietet die Windows API dafür keine Funktionalität. Sonst würde MS selbst das vermutlich auch in Zip-Ordnern nutzen. ;-)

Insofern bleibt dir nur, dass du das PE-Format selbst auseinander nimmst. ;-)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 27.06.11 22:00 
Wenn ich das grad richtig in Erinnerung habe, waren die Versions-Informationen ein spezieller Resourcen-Typ, den man abfragen konnte. Du könntest also die DLL aus dem Memory-Stream via LoaDLibraryEx als Datenbereich mappen lassen (dabei wird DllMain der DLL nicht ausgeführt) und dann über das erhaltene Handle die Versions-Resource abfragen. Wenn die genannten APIs von Windows ein Module-Handle akzeptieren, könntest Du hier das von LoadLibraryEx gelieferte verwenden. Ansonsten über einen TResourceStream die binäre Versionsinformation extrahieren und parsen. So viel Erleichterung bringt das LoadLibraryEx gegenüber dem Parsen der PE-Header zwar nicht, ABER man hat durch den TResourceStream gleich die korrekte Lokalisation der Versionsresource.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 29.06.11 12:25 
Hallo,

danke für die Antworten. Das war zwar nicht unbedingt das was ich hören wollte, aber wirklich überrascht hat es mich auch nicht ;).

Danke Jungs,
Klabautermann