AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Versionsinfo auslesen ohne \VarFileInfo\Translation
Thema durchsuchen
Ansicht
Themen-Optionen

Versionsinfo auslesen ohne \VarFileInfo\Translation

Ein Thema von moelski · begonnen am 28. Jun 2009 · letzter Beitrag vom 30. Nov 2010
Antwort Antwort
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Versionsinfo auslesen ohne \VarFileInfo\Translation

  Alt 28. Jun 2009, 17:47
Moin !

s.h.a.r.k hat in diesem Beitrag ...
http://www.delphipraxis.net/internal...sfixedfileinfo
eine nette Klasse gepostet -> classTExeInformation.

Der Grundlegende Code zu der Klasse scheint übrigens (nebenbei erwähnt) von hier zu stammen:
http://www.swissdelphicenter.ch/torr...de.php?id=1047

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:
    iRet := SHGetFileInfo(PChar(FExeFilename), 0, rSHFI, SizeOf(rSHFI), SHGFI_EXETYPE);
    if iRet <> 0 then
    ...
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?

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.
Angehängte Dateien
Dateityp: pas classtexeinformation_124.pas (12,0 KB, 9x aufgerufen)
Dateityp: dll wsq_101.dll (48,0 KB, 4x aufgerufen)
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Versionsinfo auslesen ohne \VarFileInfo\Translation

  Alt 29. Nov 2010, 16:57
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.
http://www.delphidabbler.com/articles?article=20
http://www.delphidabbler.com/software/vibindata/main
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Versionsinfo auslesen ohne \VarFileInfo\Translation

  Alt 29. Nov 2010, 17:10
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Versionsinfo auslesen ohne \VarFileInfo\Translation

  Alt 29. Nov 2010, 18:13
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

AW: Versionsinfo auslesen ohne \VarFileInfo\Translation

  Alt 29. Nov 2010, 19:25
http://www.delphipraxis.net/154099-v...fileutils.html
http://www.delphipraxis.net/142192-b...ompiliert.html
und ich bin mir relativ ganz sicher, daß in der DP-CodeLib auch was drinsteht.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

AW: Versionsinfo auslesen ohne \VarFileInfo\Translation

  Alt 30. Nov 2010, 03:24
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Versionsinfo auslesen ohne \VarFileInfo\Translation

  Alt 30. Nov 2010, 09:24
Aber man stößt eben immer wieder an das Problem, dass es eben auch andere Formate gibt, die die Windows API nicht auslesen kann.
Es gibt von MS entsprechende Spezifikationen, wie diese Resorce auszusehn hat und entsprechend dieser Vorgaben arbeitet auch die WinAPI.

Wenn jemand diese Resource anders/"falsch" erstellt, dann hat er eben Pech und es wird nichts angezeigt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz