AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Versionsinfo auslesen?

Ein Thema von Borschti · begonnen am 9. Apr 2008 · letzter Beitrag vom 18. Mai 2017
Antwort Antwort
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Re: Versionsinfo auslesen?

  Alt 9. Apr 2008, 16:27
Hallo, ich verwende immer diese Funktion:
Delphi-Quellcode:
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;
Sie liefert einen String, der die Version enthält und funktioniert eigentlich in allen Delphi-Versionen ab 6.
Man muss natürlich in den Projectoptionen auch die Versionsangabe freischalten, sonst wirft die Function nen Error.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Nostromo1111

Registriert seit: 5. Mai 2007
3 Beiträge
 
#2

AW: Re: Versionsinfo auslesen?

  Alt 14. Mär 2012, 09:14
Hallo, ich verwende immer diese Funktion:
Delphi-Quellcode:
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;
Sie liefert einen String, der die Version enthält und funktioniert eigentlich in allen Delphi-Versionen ab 6.
Man muss natürlich in den Projectoptionen auch die Versionsangabe freischalten, sonst wirft die Function nen Error.
Und in Delphi 7 hat man 4 stellige Versionen. Daher kann man ab Delphi 7 noch folgende letzte Result-Zeile hinzufügen:

Result := Result + '.' + IntToStr(dwFileVersionLS and $FFFF);

Nur zur Info. Beitrag ist schon alt, aber einer der ersten die einem über Google ins Auge fallen.
  Mit Zitat antworten Zitat
matze8426
(Gast)

n/a Beiträge
 
#3

AW: Re: Versionsinfo auslesen?

  Alt 18. Mai 2017, 00:36
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...
Hallo, ich verwende immer diese Funktion:
Delphi-Quellcode:
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;
Sie liefert einen String, der die Version enthält und funktioniert eigentlich in allen Delphi-Versionen ab 6.
Man muss natürlich in den Projectoptionen auch die Versionsangabe freischalten, sonst wirft die Function nen Error.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
771 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Versionsinfo auslesen?

  Alt 18. Mai 2017, 06:09
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
Michael Gasser

Geändert von Michael II (18. Mai 2017 um 10:23 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Versionsinfo auslesen?

  Alt 18. Mai 2017, 06:14
Zitat:
PWideChar und nicht PChar
PChar wir doch vom Compiler automatisch nach PWideChar gecastet oder?

sollte eigentlich kein Problem sein.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#6

AW: Versionsinfo auslesen?

  Alt 18. Mai 2017, 08:37
GetFileVersionInfoA -> PAnsiChar
GetFileVersionInfoW -> PWideChar
GetFileVersionInfo -> PChar

Welcher Typ der richtige ist, hängt also vom Aufruf ab. Somit sollte der gepostete Code sowohl in Ansi als auch Unicode korrekt sein, da Typ-Aliase verwendet werden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#7

AW: Versionsinfo auslesen?

  Alt 18. Mai 2017, 08:56
Der oben genannte Code ist unvollständig: es fehlt die Build-Version.
Delphi-Quellcode:
function GetAppVersionStr: string;
var
  Exe: string;
  Size, Handle: DWORD;
  Buffer: TBytes;
  FixedPtr: PVSFixedFileInfo;
begin
  Exe := ParamStr(0);
  Size := GetFileVersionInfoSize(PChar(Exe), Handle);
  if Size = 0 then RaiseLastOSError;
  SetLength(Buffer, Size);
  if not GetFileVersionInfo(PChar(Exe), Handle, Size, Buffer) then
    RaiseLastOSError;
  if not VerQueryValue(Buffer, '\', Pointer(FixedPtr), Size) then
    RaiseLastOSError;
  Result := Format('%d.%d, Release: %d, Build: %d',
    [LongRec(FixedPtr.dwFileVersionMS).Hi, //major
     LongRec(FixedPtr.dwFileVersionMS).Lo, //minor
     LongRec(FixedPtr.dwFileVersionLS).Hi, //release
     LongRec(FixedPtr.dwFileVersionLS).Lo]) //build
end;
Aufruf:
caption:= 'Version: '+GetAppVersionStr; -----------------------------
Ausgabe-Beispiel:
Version: 1.2, Release: 3, Build: 4

Geändert von t.roller (18. Mai 2017 um 08:59 Uhr)
  Mit Zitat antworten Zitat
matze8426
(Gast)

n/a Beiträge
 
#8

AW: Versionsinfo auslesen?

  Alt 18. Mai 2017, 11:46
Vielen Dank für die ausführlichen Antworten. Es funktioniert
  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 08:38 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