Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Programm-Version ermitteln (https://www.delphipraxis.net/54706-programm-version-ermitteln.html)

Delphi-für-alle 10. Okt 2005 12:18


Programm-Version ermitteln
 
Hallo an Alle!

Erst mal ein großes Lob für dieses tolle Forum, ich habe mir hier als Gast schon so manche Anregung geholt!

Eine Frage konnte ich allerdings nirgens beantwortet finden:
Wie kann eine laufende Anwendung seine eigene Programm-Version ermitteln?

Ihr wisst schon: diejenige, die man unter "Versionsinformationen" unter den Eigenschaften einer Programmdatei abfragen kann (muss ja irgendwo im Header der EXE-Datei stehen...).

Gibt`s da `ne Windows-API-Funktion?

Bitte schlagt mich nicht gleich, wenn diese Frage schon tausendmal gestellt und beantwortet wurde...! :roll:

Hintergrund: Ich möchte die interne Versionsnummer mit der Versionsnummer in einer INI-Datei vergleichen, um sicherzustellen, dass beide miteinander kompatibel sind...

Danke im Voraus!

dfried 10. Okt 2005 12:21

Re: Programm-Version ermitteln
 
GetFileVersionInfo

Gibt aber diverse Threads dazu in der DP!

RavenIV 10. Okt 2005 12:27

Re: Programm-Version ermitteln
 
hier ein kurzer Quelltext-Auszug, der bei mir funktioniert:
Delphi-Quellcode:
// Versionsinformation aus exe-File auslesen
function GetVersion (): 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 := IntTostr (dwFileVersionMS shr 16);
    result := result + '.' + IntTostr (dwFileVersionMS and $FFFF);
    result := result + '.' + IntTostr (dwFileVersionLS shr 16);
    result := result + '.' + IntTostr (dwFileVersionLS and $FFFF);
  end;
  FreeMem (VerInfo, VerInfoSize);
end;
Verwendung:
Delphi-Quellcode:
LaVersion.Caption := 'Version ' + GetVersion; // Fileversion auslesen aus exe
edit: der Quellcode stammt nicht von mir, hab ich hier in DP gefunden.

Matze 10. Okt 2005 12:28

Re: Programm-Version ermitteln
 
Hallo,

diese Variante hat mir Matti vor einiger Zeit so geschickt, näheres dazu auch hier

Delphi-Quellcode:
type
  TGetVersionsStr = Record
    ShortString: String[12];
    LongString: String[24];
  end;
Delphi-Quellcode:
function TForm1.GetVersion: TGetVersionsStr;
var
  VerInfoSize: DWORD;
  VerInfo: Pointer;
  VerValueSize: DWORD;
  VerValue: PVSFixedFileInfo;
  Dummy: DWORD;
begin
  VerInfo := nil;
  try
    VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
    try
      GetMem(VerInfo, VerInfoSize);
      GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
      VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
      with VerValue^ do
      begin
        Result.LongString := Format('%d.%d.%d.%d',
          [dwFileVersionMS shr 16,
          dwFileVersionMS and $FFFF,
          dwFileVersionLS shr 16,
          dwFileVersionLS and $FFFF]);

        Result.ShortString := Format('%d.%d',
          [dwFileVersionMS shr 16,
          dwFileVersionMS and $FFFF]);
      end;
    finally
      FreeMem(VerInfo, VerInfoSize);
    end;
  except
    Result.ShortString := #$31#$2E#$30; // 1.0
    Result.LongString := Result.ShortString;
  end;
end;
Aufruf:

Delphi-Quellcode:
Label1.Caption := format('Version: %s', [GetVersion.LongString]); //oder natürlich auch 'GetVersion.ShortString'

Delphi-für-alle 11. Okt 2005 11:02

Re: Programm-Version ermitteln
 
Danke Jungs, GetFileVersionInfo ist natürlich genau richtig - aber wenn man nich weiss, wie die API-Funktion heisst, steht man da wie der Ochs vorm Berg...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 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