Programmversion von extern auslesen
-
- Lazarusforum e. V.
- Beiträge: 369
- Registriert: So 5. Mai 2019, 16:52
- OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
- CPU-Target: x86_64, i386
- Wohnort: Bayreuth
Programmversion von extern auslesen
Hallo,
ich kann in den Projekteinstellungen eine Versionsinformation hinterlegen. Diese kann ich problemlos im Projekt selbst auslesen und verwenden. Dies funktioniert unter Windows und Linux.
Gibt es eine Möglichkeit, die Versionsinformation einer Anwendung mit einer anderen Anwendung auzulesen? Und wenn ja sowohl unter Windows als auch unter Linux?
Vielen Dank.
Schöne Grüße
ich kann in den Projekteinstellungen eine Versionsinformation hinterlegen. Diese kann ich problemlos im Projekt selbst auslesen und verwenden. Dies funktioniert unter Windows und Linux.
Gibt es eine Möglichkeit, die Versionsinformation einer Anwendung mit einer anderen Anwendung auzulesen? Und wenn ja sowohl unter Windows als auch unter Linux?
Vielen Dank.
Schöne Grüße
Tipp für PostgreSQL: www.pg-forum.de
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Programmversion von extern auslesen
sysutils.GetFileVersion
Funktioniert aber afaik nur unter Windows
Funktioniert aber afaik nur unter Windows
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Programmversion von extern auslesen
Yes! Win32 und WinCE only.fliegermichl hat geschrieben: Fr 15. Okt 2021, 15:10 sysutils.GetFileVersion
Funktioniert aber afaik nur unter Windows
Winni
-
- Beiträge: 955
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Programmversion von extern auslesen
Dafür kannst du die Units des in FPC enthaltenen fcl-res Packages verwenden. Beispiel:Ich934 hat geschrieben: Fr 15. Okt 2021, 12:04 Gibt es eine Möglichkeit, die Versionsinformation einer Anwendung mit einer anderen Anwendung auzulesen? Und wenn ja sowohl unter Windows als auch unter Linux?
Code: Alles auswählen
program tres;
{$mode objfpc}
uses
versionresource, winpeimagereader, elfreader, machoreader, resource;
var
i, j: LongInt;
res: TResources;
ar: TAbstractResource;
begin
res := TResources.Create;
try
for i := 1 to ParamCount do begin
Writeln('Opening ', ParamStr(i));
res.LoadFromFile(ParamStr(i));
ar := res.Find(RT_VERSION, 1);
if not (ar is TVersionResource) then begin
Writeln('RT_VERSION 1 is not a version resource');
Continue;
end;
Write('File Version: ');
for j := 0 to 3 do begin
if j > 0 then
Write('.');
Write(TVersionResource(ar).FixedInfo.FileVersion[j]);
end;
Writeln;
end;
finally
res.Free;
end;
end.
Code: Alles auswählen
PS D:\fpc\git> .\testoutput\tres.exe D:\lazarus\svn\lazarus.exe C:\Windows\System32\kernel32.dll
Opening D:\lazarus\svn\lazarus.exe
File Version: 2.3.0.0
Opening C:\Windows\System32\kernel32.dll
File Version: 10.0.19041.1202

FPC Compiler Entwickler
- Ally
- Beiträge: 282
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: Programmversion von extern auslesen
hier noch eine Unit.
Gruß Roland
----------------
Gruß Roland
----------------
Code: Alles auswählen
// ----------------------------------------------------------------------------
// rhsVersionFromFile
// ----------------------------------------------------------------------------
//
// Example:
// Label1 := GetVersionFromFile('C:\Test.exe', 4);
// ----------------------------------------------------------------------------
unit rhsVersionFromFile;
{$mode objfpc}{$H+}
interface
uses
SysUtils, FileInfo, winpeimagereader, elfreader, machoreader;
function GetVersionFromFile(Filename: String; SubVer: Integer): String;
implementation
function GetVersionFromFile(Filename: String; SubVer: Integer): String;
var
VI: TVersionInfo;
begin
try
VI := TVersionInfo.Create;
VI.Load(Filename);
if SubVer > 0 then
Result := IntToStr(VI.FixedInfo.FileVersion[0]);
if SubVer > 1 then
Result := Result + '.' + IntToStr(VI.FixedInfo.FileVersion[1]);
if SubVer > 2 then
Result := Result + '.' + IntToStr(VI.FixedInfo.FileVersion[2]);
if SubVer > 3 then
Result := Result + '.' + IntToStr(VI.FixedInfo.FileVersion[3]);
except
Result := '';
end;
VI.Free;
end;
end.
- af0815
- Lazarusforum e. V.
- Beiträge: 6785
- 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: Programmversion von extern auslesen
Was meinst du genau unter anderer Anwendung ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Lazarusforum e. V.
- Beiträge: 369
- Registriert: So 5. Mai 2019, 16:52
- OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
- CPU-Target: x86_64, i386
- Wohnort: Bayreuth
Re: Programmversion von extern auslesen
Mit einer Anwendung die Versionsnummern einer zweiten .exe Datei unter Windows oder ELF-Binary unter Linux.
Die Klassen schau ich mir Mal an. Danke.
Tipp für PostgreSQL: www.pg-forum.de
-
- Lazarusforum e. V.
- Beiträge: 369
- Registriert: So 5. Mai 2019, 16:52
- OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
- CPU-Target: x86_64, i386
- Wohnort: Bayreuth
Re: Programmversion von extern auslesen
Funktioniert prima und ist genau das, was ich gesucht habe! Nochmals vielen Dank!PascalDragon hat geschrieben: Fr 15. Okt 2021, 16:33 Dafür kannst du die Units des in FPC enthaltenen fcl-res Packages verwenden. Beispiel:
Tipp für PostgreSQL: www.pg-forum.de
-
- Beiträge: 955
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Programmversion von extern auslesen
Das Beispiel von Ally ist noch etwas einfacher, setzt aber intern auf dem gleichen Code auf (mir war die Load Methode von TVersionInfo nicht bewusst).Ich934 hat geschrieben: So 17. Okt 2021, 20:33Funktioniert prima und ist genau das, was ich gesucht habe! Nochmals vielen Dank!PascalDragon hat geschrieben: Fr 15. Okt 2021, 16:33 Dafür kannst du die Units des in FPC enthaltenen fcl-res Packages verwenden. Beispiel:
FPC Compiler Entwickler