Registriert seit: 31. Okt 2004
Ort: Bremerhaven
355 Beiträge
Delphi XE7 Professional
|
AW: [XE5] Versionsinformation vs Dateiversion
2. Feb 2014, 10:10
Moin,
ich habe jetzt eine Lösung im Forum gefunden die funktioniert:
Delphi-Quellcode:
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;
Den vorderen Teil des "Result" mittels "copy" abgeschnitten und ich habe was ich brauche.
Code:
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.
Gut zu wissen.
Gruß Heiko
OS: Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC)
|
|
Zitat
|