![]() |
Versionsinfo auslesen ohne \VarFileInfo\Translation
Liste der Anhänge anzeigen (Anzahl: 2)
Moin !
s.h.a.r.k hat in diesem Beitrag ... ![]() eine nette Klasse gepostet -> classTExeInformation. Der Grundlegende Code zu der Klasse scheint übrigens (nebenbei erwähnt) von hier zu stammen: ![]() Die funzt auch ganz prächtig bis auf 2 Kleinigkeiten... 1) So wie die Klasse ist kann man nur EXE Dateien damit abfragen. Bei DLL / SYS streikt die Klasse und das liegt wohl an dem Teil hier:
Delphi-Quellcode:
Wenn ich den Teil weglasse, dann kann ich die Klasse auch für DLL / SYS verwenden. Frage ... Stellt das ein nennenswertes Problem dar? Oder ist das letztlich nur noch eine Zusatzüberprüfung ob die Datei wirklich eine Executable ist?
iRet := SHGetFileInfo(PChar(FExeFilename), 0, rSHFI, SizeOf(rSHFI), SHGFI_EXETYPE);
if iRet <> 0 then ... 2) Und das ist die eigentlich wichtigerere Frage ... Wenn ich eine Datei habe in der kein '\VarFileInfo\Translation' Eintrag vorhanden ist, dann kann die Klasse keine Sprache ermitteln und daraus resultiert das keine Ergebnisse geliefert werden. Schaut man sich aber die Datei z.B. im Resource Tuner an, dann findet der sehrwohl Sprache als auch die Einträge wie Version, CompanyName, etc. Wenn man den Code zum Auslesen der Infos dann hart auf die Sprache einstellt, dann kann man die auch ohne weitere lesen. Kurzum, hat jemand eine Idee wie man die Klasse dahingehend erweitert, dass man auch ohne \VarFileInfo\Translation die Informationen aus der DLL lesen kann? Ich hänge mal die Klasse an (ich hoffe Shark hat nix dagegen) und füge auch die DLL ein wie mir das mit dem fehlenden \VarFileInfo\Translation aufgefallen ist. Die DLL stammt vom IrfanView Projekt. |
AW: Versionsinfo auslesen ohne \VarFileInfo\Translation
Vielleicht hilft es ja später nochmal einem. Hab mich wieder mal mit meiner Klasse beschäftigt und eine aktualisierte Version hochgeladen. Allerdings arbeitet diese immer noch mit dem Code der hier verlinkten Klasse, daher gibts immer noch Probleme.
Hier mal zwei Links, die helfen sollten Versionsinformationen aus Dateien auszulesen, die nicht nach dem MS-Standard gespeichert wurden. ![]() ![]() |
AW: Versionsinfo auslesen ohne \VarFileInfo\Translation
wenn Du nur die Version brauchst
Delphi-Quellcode:
Function GetFileVer(s:String):String;
type zz=^VS_FIXEDFILEINFO; var p:Array[0..255] of Char; poi:Pointer; plen:Cardinal; i,j:Integer; begin if GetFileVersionInfo(Pchar(s),0,SizeOf(p),@p[0]) then begin Result:=p; if VerQueryValue(@p[0],'\',poi,plen) then begin i:=VS_FIXEDFILEINFO(zz(poi)^).dwFileVersionMS; j:=VS_FIXEDFILEINFO(zz(poi)^).dwFileVersionLS; Result:=IntToStr(i div 65536)+'.'+IntToStr(i mod 65536)+'.'+IntToStr(j div 65536)+'.'+IntToStr(j mod 65536); end else Result:=''; end else Result:=''; end; |
AW: Versionsinfo auslesen ohne \VarFileInfo\Translation
So wie es aussieht, bezieht sich dein Code auch auf den MS-Standard für Versionsinformationen in einer Datei. Dies muss teilweise nicht gegeben sein, wodurch dein Code evtl. scheitern kann. Und genau hier kann man seinen "alten" quasi wegwerfen und die DLL von DelphiDabller nutzen :)
Für mich reicht meine bisherige Klasse, da ich lediglich die Version etc. aus meiner eigenen EXE auslese, somit dürfte dein Code auch für eigene Projekte wunderbar funktionieren. Will man aber unter umständen andere Files untersuchen, wirst du evtl. Probleme bekommen bzw. eben keinerlei Daten bekommen. |
AW: Versionsinfo auslesen ohne \VarFileInfo\Translation
![]() ![]() und ich bin mir relativ ganz sicher, daß in der DP-CodeLib auch was drinsteht. |
AW: Versionsinfo auslesen ohne \VarFileInfo\Translation
Jo, aber die Codes nutzen alle die Windows-API. Mit Hilfe des MSDN kann man sich sogar selbst den Code mal schnell zusammen schreiben. Aber man stößt eben immer wieder an das Problem, dass es eben auch andere Formate gibt, die die Windows API nicht auslesen kann.
|
AW: Versionsinfo auslesen ohne \VarFileInfo\Translation
Zitat:
Wenn jemand diese Resource anders/"falsch" erstellt, dann hat er eben Pech und es wird nichts angezeigt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz