[Gelöst]: Versionsinformationen auslesen

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1236
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

[Gelöst]: Versionsinformationen auslesen

Beitrag von kralle »

Hallo,

ich wollte wie unter Delphi die Informationen die unter "Projekteinstellungen/Versionsinformationen" vorliegen zur Laufzeit ausgeben und fand folgende Codezeilen:

Code: Alles auswählen

unit vinfo;
 
{$mode objfpc}
 
interface
 
uses
  Classes, SysUtils, resource, versiontypes, versionresource;
 
type
  { TVersionInfo }
 
  TVersionInfo = class
  private
    FVersResource: TVersionResource;
    function GetFixedInfo: TVersionFixedInfo;
    function GetStringFileInfo: TVersionStringFileInfo;
    function GetVarFileInfo: TVersionVarFileInfo;
  public
    constructor Create;
    destructor Destroy; override;
 
    procedure Load(Instance: THandle);
    property FixedInfo: TVersionFixedInfo read GetFixedInfo;
    property StringFileInfo: TVersionStringFileInfo read GetStringFileInfo;
    property VarFileInfo: TVersionVarFileInfo read GetVarFileInfo;
  end;
 
implementation
 
{ TVersionInfo }
 
function TVersionInfo.GetFixedInfo: TVersionFixedInfo;
begin
  Result := FVersResource.FixedInfo;
end;
 
function TVersionInfo.GetStringFileInfo: TVersionStringFileInfo;
begin
  Result := FVersResource.StringFileInfo;
end;
 
function TVersionInfo.GetVarFileInfo: TVersionVarFileInfo;
begin
  Result := FVersResource.VarFileInfo;
end;
 
constructor TVersionInfo.Create;
begin
  inherited Create;
  FVersResource := TVersionResource.Create;
end;
 
destructor TVersionInfo.Destroy;
begin
  FVersResource.Free;
  inherited Destroy;
end;
 
procedure TVersionInfo.Load(Instance: THandle);
var
  Stream: TResourceStream;
begin
  Stream := TResourceStream.CreateFromID(Instance, 1, PChar(RT_VERSION));
  try
    FVersResource.SetCustomRawDataStream(Stream);
    // access some property to load from the stream
    FVersResource.FixedInfo;
    // clear the stream
    FVersResource.SetCustomRawDataStream(nil);
  finally
    Stream.Free;
  end;
end;
 
end.
und

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
 
   function ProductVersionToString(PV: TFileProductVersion): String;
   begin
     Result := Format('%d.%d.%d.%d', [PV[0],PV[1],PV[2],PV[3]])
   end;
 
var
   Info: TVersionInfo;
begin
   Info := TVersionInfo.Create;
   Info.Load(HINSTANCE);
   ShowMessage(ProductVersionToString(Info.FixedInfo.FileVersion));
   ShowMessage(ProductVersionToString(Info.FixedInfo.ProductVersion));
   Info.Free;
end;
Aber, wenn ich das Programm starte, werden diese Units nicht gefunden:
resource, versiontypes, versionresource;
Warum?

Lazarus-Version 9.28.2
OS: Windows XP SP3

MfG
Heiko Rompel
Zuletzt geändert von kralle am Sa 26. Mär 2011, 19:29, insgesamt 1-mal geändert.
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Versionsinformationen auslesen

Beitrag von Maik81ftl »

Hmmm, hab mal bei mir gesucht, gennerell sind die daten bei Lazarus vorhanden, daran kann's nicht liegen, da sowas aber auch mir schon vorgekommen ist, gehe ich mal davon aus, das die Phade zu den Units nicht richtig eingestellt sind.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1236
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Versionsinformationen auslesen

Beitrag von kralle »

Hallo,
Maik81ftl hat geschrieben:Hmmm, hab mal bei mir gesucht, gennerell sind die daten bei Lazarus vorhanden, daran kann's nicht liegen, da sowas aber auch mir schon vorgekommen ist, gehe ich mal davon aus, das die Phade zu den Units nicht richtig eingestellt sind.
Aber wie kann das passieren? Ich habe Lazarus einfach installiert ohne an irgendwelchen Pfaden zu spielen.

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Versionsinformationen auslesen

Beitrag von Maik81ftl »

jopp! genau das is die Tücke, welche i bei Lazarus unter XP auch schon einige male erleben durfte :| kann aber sein, das das denne direkt am rechner liegt.

sind die sogenannten Feinheiten eines Systemes.

deshalb bin ich unter anderem auch zu Ubuntu gewechselt.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Versionsinformationen auslesen

Beitrag von MAC »

hast du die units mal kopiert und einfach in das verzeichnis deines projektes gelegt ?
könnte eventuell auch reichen.

Code: Alles auswählen

Signatur := nil;

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Versionsinformationen auslesen

Beitrag von Socke »

kralle hat geschrieben:Aber wie kann das passieren? Ich habe Lazarus einfach installiert ohne an irgendwelchen Pfaden zu spielen.
Was steht denn in der vollständigen Compilerausgabe drinnen (Rechtsklick in das Nachrichtenfenster -> "Alles und verstecktes kopieren")? Wenn er die Datei findet, aber anmeckert (dass sie neu kompiliert werden müsse), ist entweder beim Packen der Installtionsdateien etwas schief gelaufen (nicht deine Schuld, aber dein Problem :D) oder die Datei wurde nachträglich verändert.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1236
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Versionsinformationen auslesen

Beitrag von kralle »

Hallo,
Socke hat geschrieben:
kralle hat geschrieben:Aber wie kann das passieren? Ich habe Lazarus einfach installiert ohne an irgendwelchen Pfaden zu spielen.
Was steht denn in der vollständigen Compilerausgabe drinnen (Rechtsklick in das Nachrichtenfenster -> "Alles und verstecktes kopieren")? Wenn er die Datei findet, aber anmeckert (dass sie neu kompiliert werden müsse), ist entweder beim Packen der Installtionsdateien etwas schief gelaufen (nicht deine Schuld, aber dein Problem :D) oder die Datei wurde nachträglich verändert.
Hint: Start of reading config file C:\Programme\lazarus\fpc\2.2.4\bin\i386-win32\fpc.cfg
Hint: End of reading config file C:\Programme\lazarus\fpc\2.2.4\bin\i386-win32\fpc.cfg
Free Pascal Compiler version 2.2.4 [2009/10/25] for i386
Copyright (c) 1993-2008 by Florian Klaempfl
Target OS: Win32 for i386
Compiling project1.lpr
Compiling unit1.pas
Compiling vinfo.pas
vinfo.pas(8,22) Fatal: Can't find unit resource used by vinfo
Dann werde ich jetzt mal die Dateien suchen und schauen, das ich den Suchpfad erweitere bzw. die Dateien ins Projektverzeichnis kopieren.

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1236
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Versionsinformationen auslesen

Beitrag von kralle »

Hallo,
MAC hat geschrieben:hast du die units mal kopiert und einfach in das verzeichnis deines projektes gelegt ?
könnte eventuell auch reichen.
Also, die Windows-Suche hat die entsprechenden *.pas Dateien nicht gefunden.
Kann es sein das die im Windows-Installationspaket nicht enthalten sind?

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6934
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Versionsinformationen auslesen

Beitrag von af0815 »

kralle hat geschrieben:Also, die Windows-Suche hat die entsprechenden *.pas Dateien nicht gefunden.
kann auch eine *.pp oder auch *.ppu Datei sein.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Versionsinformationen auslesen

Beitrag von Socke »

kralle hat geschrieben:Kann es sein das die im Windows-Installationspaket nicht enthalten sind?
Da fällt mir gerade so ein: Warum verwendest du unter Windows nicht die Windows-API?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Versionsinformationen auslesen

Beitrag von MAC »

Socke hat geschrieben:
kralle hat geschrieben:Kann es sein das die im Windows-Installationspaket nicht enthalten sind?
Da fällt mir gerade so ein: Warum verwendest du unter Windows nicht die Windows-API?
Wieso sollte er sie benutzen , ist es nicht besser wenn man davon unabhängig ist damit das einfacher portierbar ist ?

Code: Alles auswählen

Signatur := nil;

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Versionsinformationen auslesen

Beitrag von Socke »

MAC hat geschrieben:Wieso sollte er sie benutzen , ist es nicht besser wenn man davon unabhängig ist damit das einfacher portierbar ist ?
Damit wir weniger Arbeit damit haben, die Suchpfade der Compiler-Installation zu raten :D.

@kralle: such dir mal bitte die Compiler-Optionen heraus, damit der FPC alle Pfade angibt, die er nach bestimmten Dateien durchsucht. Die gibst du dann bei deinem Projekt in den Compiler-Einstellungen an und postest nochmal die Ausgabe.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

shokwave
Beiträge: 476
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Versionsinformationen auslesen

Beitrag von shokwave »

MAC hat geschrieben:
Socke hat geschrieben:Wieso sollte er sie benutzen , ist es nicht besser wenn man davon unabhängig ist damit das einfacher portierbar ist ?
Ist das nicht eh Win-Only?

@Kralle: Ich benutze dafür die unit FileInfo.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var myFileInfo:TFileVersionInfo;
begin
  myFileInfo:=TFileVersionInfo.Create(nil);
  myFileInfo.fileName:='C:\Windows\System32\Explorer.exe';
  showMessage(myFileinfo.getVersionSetting('CompanyName'));
  myFileInfo.Free;
end;
Die Namen der Versionsinfos findet man in der Unit:

Code: Alles auswählen

...
    ts.add('CompanyName');
    ts.add('FileDescription');
    ts.add('FileVersion');
    ts.add('InternalName');
    ts.add('LegalCopyright');
    ts.add('OriginalFilename');
    ts.add('ProductName');
    ts.add('ProductVersion');
...
mfg Ingo

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1236
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Versionsinformationen auslesen

Beitrag von kralle »

Hallo,
af0815 hat geschrieben:
kralle hat geschrieben:Also, die Windows-Suche hat die entsprechenden *.pas Dateien nicht gefunden.
kann auch eine *.pp oder auch *.ppu Datei sein.
Ich habe jetzt mal Lazarus neu installiert.
Lazarus Pfad ist jetzt: c:\lazarus
FPC-Quelltextverzeichnis: C:\lazarus\fpc\2.2.4\source\

Die Dateien die ich benötige liegen in: C:\lazarus\fpc\2.2.4\source\packages\fv\src\resource.pas
werden da aber anscheinend nicht gefunden.

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1236
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Versionsinformationen auslesen

Beitrag von kralle »

Moin,
af0815 hat geschrieben:
kralle hat geschrieben:Also, die Windows-Suche hat die entsprechenden *.pas Dateien nicht gefunden.
kann auch eine *.pp oder auch *.ppu Datei sein.
Ich suchte nach .* und nicht nach .pas .

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Antworten