AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Sonstiges Delphi Versionsinformationen einer EXE- oder DLL-Datei abfragen
Thema durchsuchen
Ansicht
Themen-Optionen

Versionsinformationen einer EXE- oder DLL-Datei abfragen

Ein Thema von faux · begonnen am 27. Jul 2006 · letzter Beitrag vom 4. Jan 2007
Antwort Antwort
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Versionsinformationen einer EXE- oder DLL-Datei abfragen

  Alt 27. Jul 2006, 19:16
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:
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;
Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Versionsinformationen einer EXE- oder DLL-Datei abfragen

  Alt 27. Jul 2006, 20:08
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;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Versionsinformationen einer EXE- oder DLL-Datei abfragen

  Alt 4. Jan 2007, 09:01
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:
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;
Und wer es für andere Dateien braucht:

Delphi-Quellcode:
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;
PS: GetFileVersion(ParamStr(0)), oder GetFileVersion(Application.ExeName) geben das selbe wie der erste Code zurück

Die im Bild rosa markierten Felder werden genutzt
und wenn keine VersionsInfo vorhanden ist, dann kommt der erste String ('NoVersionInfo') raus.
Miniaturansicht angehängter Grafiken
version_186.jpg  
  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 05:23 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