![]() |
Versionsinformationen einer EXE- oder DLL-Datei abfragen
Hallo!
Habe hier in der DP mal vor längerer Zeit diesen Code gefunden, weiß aber leider nicht mehr von wem dieser ist. Damit kann man die Versionsinformation von EXE- oder DLL-Dateien auslesen. Habe diesen Code etwas angepasst:
Delphi-Quellcode:
Grüße
uses
Windows; type // 1: Major, 2: Minor, 3: Release, 4: Build TFileVersion = array [1..4] of Smallint; function GetVersion(FileName: string): TFileVersion; var VerInfoSize, VerValueSize, Dummy: DWord; VerInfo: Pointer; VerValue: PVSFixedFileInfo; begin // Länge der Dateiinformationen bekommen. VerInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy); // Speicherplatz reservieren. GetMem(VerInfo, VerInfoSize); // Dateiinformationen selektieren. GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, VerInfo); // Prüfen ob Dateiinformationen vorhanden if VerInfo <> nil then begin // Dateiinformationen auslesen. VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); // Version auslesen und zurückgeben. with VerValue^ do begin // Major Result[1] := dwFileVersionMS shr 16; // Minor Result[2] := dwFileVersionMS and $FFFF; // Release Result[3] := dwFileVersionLS shr 16; // Build Result[4] := dwFileVersionLS and $FFFF; end; end; // Speicher freigeben (Dateiinformationen). FreeMem(VerInfo, VerInfoSize); end; Faux |
Re: Versionsinformationen einer EXE- oder DLL-Datei abfragen
Ich würde es so machen:
Delphi-Quellcode:
function GetVersion(FileName: string; var Major, Minor, Release, Build: DWORD): DWORD;
var VerInfoSize, VerValueSize, Dummy: DWord; VerInfo : Pointer; VerValue : PVSFixedFileInfo; err : DWORD; begin err := 0; VerInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy); if VerInfoSize <> 0 then begin GetMem(VerInfo, VerInfoSize); try GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, VerInfo); if VerInfo <> nil then begin if VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize) then begin with VerValue^ do begin Major := dwFileVersionMS shr 16; Minor := dwFileVersionMS and $FFFF; Release := dwFileVersionLS shr 16; Build := dwFileVersionLS and $FFFF; end; end else err := GetLastError; end; finally FreeMem(VerInfo, VerInfoSize); end; end else err := GetLastError; result := err; end; procedure TForm1.Button1Click(Sender: TObject); var Major, Minor, Release, Build: DWORD; err: DWORD; s: String; begin err := GetVersion(ParamStr(0), Major, Minor, Release, Build); if err <> 0 then s := SysErrorMessage(err) else s := Format('%d.%d.%d.%d', [major, Minor, Release, Build]); ShowMessage(s); end; |
Re: Versionsinformationen einer EXE- oder DLL-Datei abfragen
Liste der Anhänge anzeigen (Anzahl: 1)
Von himitsu kommt folgende Version mit dem Zusatz, dass angezeigt wird, um welche Art der Version es sich handelt.
z.B.: debug = Fehlersuche beta = Testversion private = Privates Build special = Spezielles Build Für die Datei (EXE/DLL) - meist das eigene Programm:
Delphi-Quellcode:
Und wer es für andere Dateien braucht:
Function GetFileVersion: String;
Var i, W: LongWord; P: Pointer; FI: PVSFixedFileInfo; Begin Result := 'NoVersionInfo'; i := GetFileVersionInfoSize(PChar(ParamStr(0)), W); If i = 0 Then Exit; GetMem(P, i); Try If not GetFileVersionInfo(PChar(ParamStr(0)), W, i, P) or not VerQueryValue(P, '\', Pointer(FI), W) Then Exit; Result := IntToStr(FI^.dwFileVersionMS shr 16) + '.' + IntToStr(FI^.dwFileVersionMS and $FFFF) + '.' + IntToStr(FI^.dwFileVersionLS shr 16) + '.' + IntToStr(FI^.dwFileVersionLS and $FFFF); If FI^.dwFileFlags and VS_FF_DEBUG <> 0 Then Result := Result + ' debug'; If FI^.dwFileFlags and VS_FF_PRERELEASE <> 0 Then Result := Result + ' beta'; If FI^.dwFileFlags and VS_FF_PRIVATEBUILD <> 0 Then Result := Result + ' private'; If FI^.dwFileFlags and VS_FF_SPECIALBUILD <> 0 Then Result := Result + ' special'; Finally FreeMem(P); End; End;
Delphi-Quellcode:
PS: GetFileVersion(ParamStr(0)), oder GetFileVersion(Application.ExeName) geben das selbe wie der erste Code zurück :zwinker:
Function GetFileVersion(Const FileName: String): String;
Var i, W: LongWord; P: Pointer; FI: PVSFixedFileInfo; Begin Result := 'NoVersionInfo'; i := GetFileVersionInfoSize(PChar(FileName), W); If i = 0 Then Exit; GetMem(P, i); Try If not GetFileVersionInfo(PChar(FileName), W, i, P) or not VerQueryValue(P, '\', Pointer(FI), W) Then Exit; Result := IntToStr(FI^.dwFileVersionMS shr 16) + '.' + IntToStr(FI^.dwFileVersionMS and $FFFF) + '.' + IntToStr(FI^.dwFileVersionLS shr 16) + '.' + IntToStr(FI^.dwFileVersionLS and $FFFF); If FI^.dwFileFlags and VS_FF_DEBUG <> 0 Then Result := Result + ' debug'; If FI^.dwFileFlags and VS_FF_PRERELEASE <> 0 Then Result := Result + ' beta'; If FI^.dwFileFlags and VS_FF_PRIVATEBUILD <> 0 Then Result := Result + ' private'; If FI^.dwFileFlags and VS_FF_SPECIALBUILD <> 0 Then Result := Result + ' special'; Finally FreeMem(P); End; End; Die im Bild rosa markierten Felder werden genutzt und wenn keine VersionsInfo vorhanden ist, dann kommt der erste String ('NoVersionInfo') raus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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