Entwickler-Ecke

Dateizugriff - ...die Version einer Exe-Datei ermitteln?


Popov - Mo 01.09.03 18:55
Titel: ...die Version einer Exe-Datei ermitteln?
Diese Funktion hab ich im Internet gefunden. Sie ist also nicht von mir.

Mit dieser Funktion kann man die Versionsnummer eines beliebigen Programms ermitteln. Die Version wird als Strings in der "a.b.c.d" Form zurückgegeben:


Funktion:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Funktion ermittelt die Versionsnummer einer Exe-Datei
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function GetFileVersion(const FileName: String): String;
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 }



Beispiele:

Um die Version des eigenen Programms in der Titelleiste des Fensters anzuzeigen:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := GetFileVersion( ParamStr(0) );   
end;


Um die Version eines fremden Programms (z.B. Windows Rechner) anzuzeigen:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage( GetFileVersion('c:\windows\calc.exe') );
end;


Um die Versionsnummer ins Projekt zu übernehmen muß im Delphi-Editor im Menü "Projekt > Optionen > Versionsinfo" die Checkbox "Versionsinfo ins Projekt übernehmen" angewählt werden. Die Angaben haben dann follgende Bedeutung:

Hauptversion - Nebenversion - Ausgabe - Compilierung