![]() |
Versionsinfo auslesen?
Hi,
Ich möchte die Infodatei meines Delphi Programms von Projekt --> Optionen --> Versionsinformationen auslesen, dazu habe Ich in der CodeLib diesen Code von Luckie gefunden:
Delphi-Quellcode:
Nun verstehe Ich nicht welche Parameter Ich der Funktion übergeben muss und wo dann die Versionsinfos dann gepeichert werden, weil die Funktion gibt einen Wert vom Typ Boolean zurück. Wie kann Ich also die erhaltenen Informationen dann irgendwo anzeigen lassen und welche Parameter müssen übergeben werden, Ich kann mit denen im Funktionskopf stehenden nicht viel anfangen :(
function GetFileInfo(
var aInternalName, aFileVersion: String; FileName: AnsiString ): Boolean; var VersionInfoSize, VerInfoSize, GetInfoSizeJunk: DWORD; VersionInfo, Translation, InfoPointer: Pointer; VersionValue: AnsiString; begin Result := False; VerInfoSize := GetFileVersionInfoSize(PChar(FileName), GetInfoSizeJunk); if VerInfoSize > 0 then begin GetMem(VersionInfo, VerInfoSize); try GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, VersionInfo); VerQueryValue( VersionInfo, '\\VarFileInfo\\Translation', Translation, VerInfoSize ); VersionValue := '\\StringFileInfo\\' + IntToHex(LoWord(LongInt(Translation^)), 4) + IntToHex(HiWord(LongInt(Translation^)), 4) + '\\'; VersionInfoSize := 0; VerQueryValue( VersionInfo, PChar(VersionValue + 'InternalName'), InfoPointer, VersionInfoSize ); aInternalName := AnsiString(PChar(InfoPointer)); VerQueryValue( VersionInfo, PChar(VersionValue + 'FileVersion'), InfoPointer, VersionInfoSize ); aFileVersion := AnsiString(PChar(InfoPointer)); finally FreeMem(VersionInfo); end; aInternalName := Trim(aInternalName); aFileVersion := Trim(aFileVersion); Result := (aInternalName <> '') and (aFileVersion <> ''); end; end; Schonmal danke für die Antworten. mfg Alex |
Re: Versionsinfo auslesen?
Hallo, ich verwende immer diese Funktion:
Delphi-Quellcode:
Sie liefert einen String, der die Version enthält und funktioniert eigentlich in allen Delphi-Versionen ab 6.
function GetCurrentVersion: String;
var VerInfoSize: DWORD; VerInfo: Pointer; VerValueSize: DWORD; VerValue: PVSFixedFileInfo; Dummy: DWORD; begin VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy); GetMem(VerInfo, VerInfoSize); GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo); VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); with VerValue^ do begin Result := 'Version '+IntToStr(dwFileVersionMS shr 16); Result := Result + '.' + IntToStr(dwFileVersionMS and $FFFF); Result := Result + '.' + IntToStr(dwFileVersionLS shr 16); end; FreeMem(VerInfo, VerInfoSize); end; Man muss natürlich in den Projectoptionen auch die Versionsangabe freischalten, sonst wirft die Function nen Error. |
Re: Versionsinfo auslesen?
zu Luckies Code:
Delphi-Quellcode:
Also, ich hab mir die Methode nicht angeschaut, aber folgendes lässt sich sagen. Es sind zwei var-Paramter vorhanden. Das ist die eigentlich Ausgabe, d.h. aInternalName und aFileVersion werden zurückgegeben. Des weiteren musst du den Dateinamen (inkl. Pfad denke ich, in so fern die Datei in einem anderen Verzeichnis befindet als im Ausführungsverzeichnis) der Datei übergeben, von welcher du die Informationen haben willst. Als Rückgabe bekommst du einen Wert vom Typ Boolean, also, ob die Anfrage überhaupt funktioniert hat oder nicht.
function GetFileInfo(
var aInternalName, aFileVersion: String; FileName: AnsiString ): Boolean; Ein Aufruf kann wie folgt aussehen:
Delphi-Quellcode:
Wenn du das ganze in eine Klasse eingearbeitet haben willst, dann kann ich sie dir gerne zur Verfügung stellen. Schickst mir einfach eine PN, dann stelle ich sie hier online. Dort werden auch noch weit mehr Informationen ausgelesen.
// in deiner Methode...
var internal_name : String; version : String; begin // ... // Dein Code // ... // Hier werden internal_name und version überschrieben, // eben mit den Werten die aus der Datei kommen if (not GetFileInfo(internal_name, version, Application.ExeName)) then begin // Version und InternalName konnten NICHT ausgelesen werden end else // Anzeige der Version showMessage('Programmversion: ' + version); // ... // Dein Code // ... end; Mit freundlichen Grüßen der Hai ;) |
Re: Versionsinfo auslesen?
Ah ok, jetzt wirds doch ein wenig klarer ;) Ich habe mal Progmans Vorschlag übernommen aber werde Luckies Code auch noch mal ausprobieren ;)
Also das mit der Versionsnummer klappt schonmal Wunderbar, Ich würde nur gerne noch den in der Datei angegebenen Firmennamen ausgeben. Wie könnte ich das möglichst einfach zu dem bestehenden Code anfügen? Noch danke für doe Hilfreichen Antworten. mfg Alex |
Re: Versionsinfo auslesen?
versuchs mal damit :
Delphi-Quellcode:
und in deinem aufruf dann
function GetFileInfo( var aInternalName, aFileVersion, aCompanyname: String; FileName: AnsiString): Boolean;
... VerQueryValue( VersionInfo, PChar(VersionValue + 'Companyname'), InfoPointer, VersionInfoSize ); aCompanyname := AnsiString(PChar(InfoPointer)); ...
Delphi-Quellcode:
procedure ...
var i_name, version, company : string ; begin GetFileInfo(i_name,version,company,[Pfad]); ... end; cya |
Re: Versionsinfo auslesen?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hänge einfach mal die Klasse an, mit welcher ich das immer löse. Damit solltest du an recht viele Informationen eine Exe (evtl. auch DLL?) kommen.
PS: Die Methode zum Auslesen ist (leider) nicht auf meinem Mist gewachsen, nur weiß ich auch nicht mehr woher ich den Code habe :oops: |
Re: Versionsinfo auslesen?
Danke für eure zahlreichen Antworten, hat auf anhieb geklappt mit soulies lösung. und jetzt weiß ich wie Ich auch andere Inhalte aus der Info auslesen kann, danke.
mfg Alex |
AW: Re: Versionsinfo auslesen?
Zitat:
Result := Result + '.' + IntToStr(dwFileVersionLS and $FFFF); Nur zur Info. Beitrag ist schon alt, aber einer der ersten die einem über Google ins Auge fallen. |
AW: Re: Versionsinfo auslesen?
Hallo zusammen,
funktioniert der folgende Code auch mit Delphi 10 Tokyo? Welche Units muss ich einbinden? Über Refactoring Unit suchen habe ich WinApi.Windows hinzugefügt. Aber GetFileVersionInfo oder z.B. GetMem findet er nicht. Laut der Hilfe gibt es die Funktion GetFileVersionInfo auch nicht, aber GetFileVersion. Aber auch die wird als undeklarierter Bezeichner angemeckert... Zitat:
|
AW: Versionsinfo auslesen?
Hallo matze8426
GetFileVersionInfo und VerQueryValue findest du auch in Tokyo in der Winapi.Windows - und sie funktionieren ;-). GetMem findest du in der unit system. Der erste Parameter von GetFileVersionInfo ist vom Typ PWideChar und nicht PChar. (Edit: Ist natürlich Mist - PChar geht auch ;-)) Nebenbei: Eventuell solltest du raus springen bei folgenden Rückgabewerten: VerInfoSize=0, GetFileVersionInfo=false oder VerQueryValue=false. Mit deiner function GetCurrentVersion kannst du auch die VersionsInfos anderer Files abfragen; wieso also nicht function GetFileVersion(const filename: string): string; - du musst nur if not GetFileVersionInfo(PWideChar(filename),... anpassen. Gruss Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 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 by Thomas Breitkreuz