Version des Programm's auslesen
Version des Programm's auslesen
moin
Kann ich irgend wie die Version aus dem Programm auslesen was ich eingestellt habe unter Einstellungen? Wollte es in ein Label lesen.
Kann ich irgend wie die Version aus dem Programm auslesen was ich eingestellt habe unter Einstellungen? Wollte es in ein Label lesen.
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Version des Programm's auslesen
Vielleicht hilft dir dies weiter: http://wiki.freepascal.org/Show_Applica ... nd_Company
Ich habe einen kleinen Code gemacht. Wichtig dabei ist, das die Versionsangabe auch in der Projekteinstellungen aktiviert ist, ansonsten kommt eine Fehlermeldung.
Ich habe einen kleinen Code gemacht. Wichtig dabei ist, das die Versionsangabe auch in der Projekteinstellungen aktiviert ist, ansonsten kommt eine Fehlermeldung.
Code: Alles auswählen
uses
fileinfo;
procedure TForm1.Button1Click(Sender: TObject);
var
FileVerInfo: TFileVersionInfo;
begin
FileVerInfo := TFileVersionInfo.Create(nil);
FileVerInfo.ReadFileInfo;
ShowMessage(FileVerInfo.VersionStrings.Text);
FileVerInfo.Free;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Version des Programm's auslesen
danke... habe jetzt nicht damit gerechnet das es mehr als ein einzeiler wird
brauche aber nur die version und habe das in ein label geladen so:
Aber jetzt noch mal eine Frage zu dieser Versionsanzeige unter Projekteinstellungen. Ich habe eingestellt das er hochzählen soll jedes mal wenn ich Kompiliere und er macht es aber nicht. Früher ging das mal. Kann mir vllt jemand sagen warum das so ist?

brauche aber nur die version und habe das in ein label geladen so:
Code: Alles auswählen
version.Caption:='Version ' + FileVerInfo.VersionStrings.Values['FileVersion'];
Aber jetzt noch mal eine Frage zu dieser Versionsanzeige unter Projekteinstellungen. Ich habe eingestellt das er hochzählen soll jedes mal wenn ich Kompiliere und er macht es aber nicht. Früher ging das mal. Kann mir vllt jemand sagen warum das so ist?
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Version des Programm's auslesen
Dieser scheint nur hoch zu zählen, wen man [shift + F9] drückt. ( neu kompilieren)Aber jetzt noch mal eine Frage zu dieser Versionsanzeige unter Projekteinstellungen. Ich habe eingestellt das er hochzählen soll jedes mal wenn ich Kompiliere und er macht es aber nicht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Version des Programm's auslesen
ja stimmt... danke
- willi4willi
- Lazarusforum e. V.
- Beiträge: 167
- Registriert: Sa 1. Nov 2008, 18:06
- OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
- CPU-Target: i386, win64, arm
Weitere Anfrage: Version des Programm's auslesen
Hallo allerseits!
Wie kann man vorher prüfen, ob das Programm Versions-Informationen besitzt?
Ein "ReadFileInfo" wird in diesem Fall mit einen Fehler zurückkommen, den ich gern vermeiden möchte.
Die Eigenschaft "Enabled" vorher abzufragen bringt nichts. Sie wird erst nach dem "ReadFileInfo" TRUE.
Hat jemand eine Idee?
Wie kann man vorher prüfen, ob das Programm Versions-Informationen besitzt?
Ein "ReadFileInfo" wird in diesem Fall mit einen Fehler zurückkommen, den ich gern vermeiden möchte.
Die Eigenschaft "Enabled" vorher abzufragen bringt nichts. Sie wird erst nach dem "ReadFileInfo" TRUE.
Hat jemand eine Idee?
Viele Grüße
Willi4Willi
------------
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2805
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Version des Programm's auslesen
Code: Alles auswählen
var
ResHandle: TFPResourceHandle;
begin
ResHandle := FindResource(Application.MainFormHandle, PChar(1), RT_VERSION);
(* ... *)
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
- willi4willi
- Lazarusforum e. V.
- Beiträge: 167
- Registriert: Sa 1. Nov 2008, 18:06
- OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
- CPU-Target: i386, win64, arm
Re: Version des Programm's auslesen
Das funktioniert leider nicht. Die Anwendung ist eine Konsoleanwendung. Hier das Beispiel:
Gibt es noch eine andere Möglichkeit, wie man ermitteln kann, ob die Ressource eingebunden ist?
Code: Alles auswählen
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils, CustApp
{$IFDEF WINDOWS} ,Windows, JwaTlHelp32{$ENDIF}
, fileinfo
, winpeimagereader {need this for reading exe info}
, elfreader {needed for reading ELF executables}
, machoreader {needed for reading MACH-O executables}
;
type
{ TMyApplication }
TMyApplication = class(TCustomApplication)
private
function GetProgramVersion(ExeFileName: String): String;
protected
procedure DoRun; override;
public
end;
{ TMyApplication }
Function TMyApplication.GetProgramVersion(ExeFileName : String) : String;
var
FileVerInfo: TFileVersionInfo;
begin
FileVerInfo:=TFileVersionInfo.Create(nil);
try
FileVerInfo.FileName:=ExeFileName;
// if FileVerInfo.Enabled then //<--- ist FALSE
// begin
FileVerInfo.ReadFileInfo;
Result:=FileVerInfo.VersionStrings.Values['FileVersion'];
// end;
finally
FileVerInfo.Free;
end;
end;
procedure TMyApplication.DoRun;
begin
Writeln(GetProgramVersion(Paramstr(0)));
Write('ENTER-->');
readln;
Terminate;
end;
var
Application: TMyApplication;
{$R *.res}
begin
Application:=TMyApplication.Create(nil);
Application.Title:='My Application';
Application.Run;
Application.Free;
end.
Viele Grüße
Willi4Willi
------------
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2805
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Version des Programm's auslesen
Kein Problem, statt Application.MainFormHandle nimmst du dann HINSTANCE.
Code: Alles auswählen
function TMyApplication.GetProgramVersion(ExeFileName: String) : String;
var
ResHandle: TFPResourceHandle;
FileVerInfo: TFileVersionInfo;
begin
ResHandle := FindResource(HINSTANCE, PChar(1), RT_VERSION);
if ResHandle > 0 then begin
FileVerInfo := TFileVersionInfo.Create(nil);
try
FileVerInfo.FileName := ExeFileName;
FileVerInfo.ReadFileInfo;
Result := FileVerInfo.VersionStrings.Values['FileVersion'];
finally
FileVerInfo.Free;
end;
end else
Result := 'Unknown';
end;
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
- willi4willi
- Lazarusforum e. V.
- Beiträge: 167
- Registriert: Sa 1. Nov 2008, 18:06
- OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
- CPU-Target: i386, win64, arm
Re: Version des Programm's auslesen
S U P E R !
Das hat geklappt, wenn man die Version des eigenen Programms haben möchte.
Was ist aber, wenn die Programmdatei eine andere ist, also nicht ParamStr(0)?
Das hat geklappt, wenn man die Version des eigenen Programms haben möchte.
Was ist aber, wenn die Programmdatei eine andere ist, also nicht ParamStr(0)?
Viele Grüße
Willi4Willi
------------
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2805
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Version des Programm's auslesen
Ist etwas komplizierter, aber nicht unmöglich:
Benötigt zusätzlich die Units Resource und VersionResource. Ehrlich gesagt würde ich dann aber eher die Exception abfangen, anstatt diese aufwändige Prüfung vorher durchzuführen.
Code: Alles auswählen
function TMyApplication.IsVersionResourceAvailable(ExeFileName: String): Boolean;
var
FileResources: TResources;
i: Integer;
begin
Result := False;
try
FileResources := TResources.Create;
FileResources.LoadFromFile(ExeFileName);
if FileResources.Count > 0 then begin
for i := 0 to (FileResources.Count - 1) do begin
if FileResources.Items[i] is TVersionResource then Result := True
end;
end;
finally
FreeAndNil(FileResources);
end;
end;
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
- willi4willi
- Lazarusforum e. V.
- Beiträge: 167
- Registriert: Sa 1. Nov 2008, 18:06
- OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
- CPU-Target: i386, win64, arm
[gelöst] Re: Version des Programm's auslesen
Das funktioniert so einwandfrei.
Danke!
Danke!
Viele Grüße
Willi4Willi
------------