Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Versionsnummer einer .exe auslesen

Empfohlene Antworten

Veröffentlicht

Hallo!

Ich hoffe, Ihr könnt mir helfen:

Ich möchte mittels Delphi die Versionsnummer einer .exe auslesen. Die .exe hat einen festen Pfad. Das Ergebnis, also die Versionsnummer, soll dann in ein label geschrieben werden.

Nun habe ich schon rausgefunden, das es mit der Funktion GetVersionInfo funzt bzw. funzen soll.

Hier mein Quellcode:

procedure TForm1.GetVersionInfo(const AFilename:String);

const

cCaptions : array[0..5] of String =

('Firmenname','Interner Name','Original-Dateiname','Produktname',

'Produktversion','Sprache');

cIdents : array[0..4] of String =

('CompanyName','InternalName','OriginalFilename','ProductName','ProductVersion');

type

PLanguageCharSet = ^TLanguageCharSet;

TLanguageCharSet = packed record L,C : Word end;

var

V1, V2, V3, V4 : Word;

VerInfoSize : Integer;

VerValueSize : DWord;

VerInfo : Pointer;

VerValue : PVSFixedFileInfo;

BufLen : DWord;

LanguageCharSet : PLanguageCharSet;

s : String;

i : Integer;

function GetStringValue(const AIdent:String):String;

var

BufLen : DWord;

p : Pointer;

begin

if VerQueryValue(VerInfo,

PChar(Format('\StringFileInfo\%.4x%.4x\%s',

[LanguageCharSet^.L,LanguageCharSet^.C,AIdent])),

p,BufLen) and (BufLen>0) then begin

SetString(Result,PChar(p),BufLen-1);

end

else begin

Result:='';

end;

end;

begin

VerInfoSize:=GetFileVersionInfoSize(PChar(AFilename),BufLen);

if VerInfoSize>0 then begin

GetMem(VerInfo,VerInfoSize);

try

if GetFileVersionInfo(PChar(AFilename),0,VerInfoSize,VerInfo) then begin

if VerQueryValue(VerInfo,'\',Pointer(VerValue),VerValueSize) then

with VerValue^ do begin

V1:=dwFileVersionMS shr 16;

V2:=dwFileVersionMS and $FFFF;

V3:=dwFileVersionLS shr 16;

V4:=dwFileVersionLS and $FFFF;

// Hier muß man sich entscheiden, entweder numerisch oder unten als String

// Gleiches gilt für Produktversion

LblDateiVersionN.Caption:=Format('%d.%d.%d.%d',[V1,V2,V3,V4]);

// Hier können noch andere Standard-Werte abgefragt werden:

// dwProductVersionMS, dwProductVersionLS : Produktversion

// dwFileFlagsMask, dwFileFlags : Flags, wie z.B. Testversion

// dwFileOS : Angaben zum Betriebssystem

// dwFileType, dwFileSubtype : Angaben zum Dateityp, z.B. Maustreiber

// dwFileDateMS, dwFileDateLS : Datum der Erzeugung

end;

// Sprach und Zeichensatz-ID ermitteln

if VerQueryValue(VerInfo,

'\VarFileInfo\Translation',

Pointer(LanguageCharSet),BufLen) then begin

// Stringfelder auslesen

LblDateiVersion.Caption:=GetStringValue('FileVersion');

LblBeschreibung.Caption:=GetStringValue('FileDescription');

LblCopyright.Caption:=GetStringValue('LegalCopyright');

with StringGrid1 do begin

ColWidths[0]:=100;

ColWidths[1]:=300;

for i:=0 to 4 do begin

Cells[0,i]:=cCaptions;

Cells[1,i]:=GetStringValue(cIdents);

end;

// Sprache auslesen

SetLength(s,100);

BufLen:=VerLanguageName(LanguageCharSet.L,PChar(s),100);

if BufLen>0 then begin

SetLength(s,StrLen(PChar(s)));

Cells[0,5]:=cCaptions[5];

Cells[1,5]:=s;

end;

end;

end;

end;

finally

FreeMem(VerInfo,VerInfoSize);

end;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

GetVersionInfo(Application.Exename);

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

with OpenDialog1 do begin

if Execute then GetVersionInfo(Filename);

end;

end;

Leider raffe ich noch nicht ganz, wie und wo ich den Dateipfad angebe und wie ich die versionsnummer dann in das Label bekomme.

Könntet Ihr mir helfen? Ich bin in Delphi leider noch sehr nah am DAU... :confused:

Danke.

Gruß

Florian

Hallo Flons,

für einen Delphi-DAU hast Du aber ganz schön was kompliziertes geschrieben.

Irgendwie bezweifle ich aber dass dieser Code deiner ist. ;)

Na gut komme ich zur Sache. Hier

findest Du eine ähnliche aber etwas einfachere Lösung für dein Problem . Da muss man der Funktion 'VersionInformation' eine Listbox übergeben. Die Items der Listbox , die mann dann anschliessend auslesen und verwenden kann, enthalten dann alle Informationen der laufenden EXE. Soll es eine andere EXE sein dann muss man die Variable 'S' entsprechend anpassen:

also statt S := Application.ExeName;

dann S:= 'c:\meinPfad\meinProgramm.exe';

Hoffentlich hift Dir das weiter.

Gruß

Dimi

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.