![]() |
[XE5] Versionsinformation vs Dateiversion
Moin,
Unter Projekt/Optionen/Versionsinformationen steht Produktversion: 1.0.0.0 Dateiversion: 1.0.0.0 In der Exe steht bei Produktversion 1.0.0.0 Dateiversion: 1.0.5145.32946. Wenn die Versionsinformationen mittel
Delphi-Quellcode:
ermittel, erhalte ich nur die 1.0.5145.32946.
function GetFileVersion(const FileName: String): String;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Funktion ermittelt die Versionsnummer einer Exe-Datei // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Quelle: http://www.delphi-library.de/topic_die+Version+einer+ExeDatei+ermitteln_15850,0.html var VersionInfoSize, VersionInfoValueSize, Zero: DWord; VersionInfo, VersionInfoValue: Pointer; begin { Ist Datei nicht vorhanden, dann Hinweis und raus aus Funktion ...} if not FileExists(FileName) then begin Result := '-1'; { alternativ auch 'File not found' oder sonstwas } Exit; end; { sonnst weiter. } Result := ''; VersionInfoSize := GetFileVersionInfoSize(PChar(FileName), Zero); if VersionInfoSize = 0 then Exit; { Bei nicht genug Speicher wird EOutOfMemory-Exception ausgelöst } GetMem(VersionInfo, VersionInfoSize); try if GetFileVersionInfo(PChar(FileName), 0, VersionInfoSize, VersionInfo) and VerQueryValue(VersionInfo, '\' { root block }, VersionInfoValue, VersionInfoValueSize) and (0 <> LongInt(VersionInfoValueSize)) then begin with TVSFixedFileInfo(VersionInfoValue^) do begin Result := IntToStr(HiWord(dwFileVersionMS)); Result := Result + '.' + IntToStr(LoWord(dwFileVersionMS)); Result := Result + '.' + IntToStr(HiWord(dwFileVersionLS)); Result := Result + '.' + IntToStr(LoWord(dwFileVersionLS)); end; { with } end; { then } finally FreeMem(VersionInfo); end; { try } end; { GetFileVersion } Wie komme ich ich an den "richtigen" Wert (1.0.0.0)? Wenn ich die obige Funktion debugge, taucht die 1.0.0.0 auch nicht darin auf. Und woher kommt der "falsche" Wert (1.0.5145.32946) in der Exe. Ich möchte die aktuelle Programmversion im Programm unter Info anzeigen. Gruß Heiko |
AW: [XE5] Versionsinformation vs Dateiversion
Ich verwende diese Version hier:
Delphi-Quellcode:
Wenn du meine Version verwendest, kommt dann die richtige Version heraus?
function GetVersionOfApp(FileName : String) : String;
var VerInfoSize, VerValueSize, Dummy : DWORD; VerInfo : Pointer; VerValue : PVSFixedFileInfo; begin Result := '0.0.0.0'; if FileExists(Filename) then begin VerInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy); if VerInfoSize = 0 then Exit; GetMem(VerInfo, VerInfoSize); try GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, VerInfo); if VerInfo <> nil then begin 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; end; finally FreeMem(VerInfo, VerInfoSize); end; end; end; |
AW: [XE5] Versionsinformation vs Dateiversion
Hallo,
Zitat:
Gruß Heiko |
AW: [XE5] Versionsinformation vs Dateiversion
Moin,
ich habe jetzt mal 6 verschiedene Funktionen die ich hier fand ausprobiert und alle liefern die Dateiversion und keine die Produktversion. Ich möchte das was unter "Projekt/Optionen/Versionsinformationen/Produktversion" steht auslesen. Wie komme ich an die auch in der EXE gspeicherte Produktversion:?: Gruß HEiko |
AW: [XE5] Versionsinformation vs Dateiversion
Wenn du nur die Information zu FileVersion =>
Delphi-Quellcode:
(Achtung nicht verwechseln mit FileVersionInfo) ausliest (übersetz das mal nach deutsch), dann bekommt man ...?
dwFileVersionMS
Ok, wonach müsste man also Ausschau halten, wenn man die Produkt Version haben möchte (übersetz das mal nach englisch)? Dann liefert eine Google Suche als ersten Treffer einen schönen Link |
AW: [XE5] Versionsinformation vs Dateiversion
Oder man ändert einfach den Wert "Build number options" auf "Do not change build number" oder auf "Auto increment build number". Dann habe ich bei der Dateiversion die gleichen Zahlen drin wie bei der Produktversion.
Edit: Oder man verwendet diesen ![]() ![]() |
AW: [XE5] Versionsinformation vs Dateiversion
Moin,
ich habe jetzt eine Lösung im Forum gefunden die funktioniert:
Delphi-Quellcode:
Den vorderen Teil des "Result" mittels "copy" abgeschnitten und ich habe was ich brauche.
function GetFileVersionsString_2(const p_sFilepath : string) : string;
// Quelle: http://www.delphipraxis.net/505-versionsinfo-automatisch-ins-programm-uebernehmen.html // Author: Luckie // Veröffentlicht: 5. Aug 2002, 20:52 // const // Das Ergebnis soll ja nett formatiert sein :) sFixVerFormat = 'Fileversion: %d.%d.%d.%d / Productversion: %d.%d.%d.%d'; var dwVersionSize : DWord; // Buffer für die Grösse der Versionsinfo der abgefragten Datei dwDummy : DWord; // Dummy, Wert wird nicht benötigt pVerBuf : Pointer; // Buffer für die Versionsdaten pFixBuf : PVSFixedFileInfo; // Buffer für die Versionsinfo fester Länge sReqdInfo : string; // Hier kommt rein, welcher Teil der Versionsinfo abgefragt werden soll begin // Annahme: Die Datei hat keine Versionsinfo Result := Format(sFixVerFormat,[0,0,0,0,0,0,0,0]); dwDummy := 0; // Dummy initialisieren sReqdInfo := '\'; // Es soll die Versionsinfo fester Länge abgefragt werden // Mal sehen, wieviel Platz die Versionsinfo der Datei braucht dwVersionSize := GetFileVersionInfoSize(PChar(p_sFilepath),dwDummy); if dwVersionSize > 0 then begin // Wenn > 0, dann Versionsinfo vorhanden try pVerBuf := AllocMem(dwVersionSize); // Buffer initialisieren // Gesamte Versionsinformationen auslesen if GetFileVersionInfo(PChar(p_sFilepath),0,dwVersionSize,pVerBuf) then begin // Werte für Versionsinfo fester Länge extrahieren if VerQueryValue(pVerBuf,PChar(sReqdInfo),Pointer(pFixBuf),dwDummy) then begin // und als Ergebnis ausgeben Result := Format(sFixVerFormat,[ (pFixBuf^.dwFileVersionMS and $FFFF0000) shr 16, // 1. Stelle HiWord, deshalb nach unten schieben pFixBuf^.dwFileVersionMS and $0000FFFF, (pFixBuf^.dwFileVersionLS and $FFFF0000) shr 16, pFixBuf^.dwFileVersionLS and $0000FFFF, (pFixBuf^.dwProductVersionMS and $FFFF0000) shr 16, pFixBuf^.dwProductVersionMS and $0000FFFF, (pFixBuf^.dwProductVersionLS and $FFFF0000) shr 16, pFixBuf^.dwProductVersionLS and $0000FFFF ]); end; end; finally // Resourcen wieder freigeben FreeMem(pVerBuf,dwVersionSize); end; end; end;
Code:
Gut zu wissen.
Oder man ändert einfach den Wert "Build number options" auf "Do not change build number" oder auf "Auto increment build number". Dann habe ich bei der Dateiversion die gleichen Zahlen drin wie bei der Produktversion.
Gruß Heiko |
AW: [XE5] Versionsinformation vs Dateiversion
Zitat:
|
AW: [XE5] Versionsinformation vs Dateiversion
Zitat:
Delphi-Quellcode:
und
dwFileVersionMS
Delphi-Quellcode:
zu erkennen.
dwProductVersionMS
Rudimentäre Englisch-Kenntnisse sind auch von Vorteil. |
AW: [XE5] Versionsinformation vs Dateiversion
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 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