Detailinformatioen einer EXE-Datei auslesen

Antworten
OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Detailinformatioen einer EXE-Datei auslesen

Beitrag von OLLI_S »

Hallo,

ich würde gerne von einer EXE-Datei alle Detailinformation auslesen, wie beispielsweise
  • Beschreibung
  • Dateiversion
  • Produktname
  • Produktversion
Ich habe allerdings keine Ahnung, wie ich an diese Daten heran komme.
Grundwissen in Pascal ist vorhanden.

Danke für Eure Hilfe!

Gruß

OLLI

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Detailinformatioen einer EXE-Datei auslesen

Beitrag von Mathias »

Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Detailinformatioen einer EXE-Datei auslesen

Beitrag von OLLI_S »

Mathias hat geschrieben:Vielleicht hilft die dies weiter : http://wiki.freepascal.org/Show_Applica ... nd_Company

Perfekt, das ist die Lösung!
Danke!

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Detailinformatioen einer EXE-Datei auslesen

Beitrag von Mathias »

Funktioniert es bei dir nur mit {$R *.res} oder geht es bei dir auch ohne.
Ich habe gerade das Wiki angepasst, weil das {$R *.res} fehlte.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Detailinformatioen einer EXE-Datei auslesen

Beitrag von OLLI_S »

Ich habe es ohne die {$R *.res} übernommen, bei mir funktioniert es.
Was macht eigentlich {$R *.res} ?

Allerdings bekomme ich beim Auslesen der Versionsinformationen bei manchen Anwendungen Fehlermeldungen.
Beim System Explorer (C:\Program Files (x86)\System Explorer\SystemExplorer.exe) bekomme ich folgende Meldung:

Code: Alles auswählen

Projekt GerVersionInfo hat Exception-Klasse >EResourceNotFoundException< ausgelöst mit der Meldung:
Can not find resource: Type = 1, Name = 12, Lang ID = 0000


Das ganze passiert bei

Code: Alles auswählen

FileVerInfo.ReadFileInfo;


Hier mein Code bis zu dem Fehler:

Code: Alles auswählen

procedure TfrmMainForm.GetVersionInfo;
var
  FileVerInfo: TFileVersionInfo;
  AppFileName: String;
 
begin
 
  FileVerInfo := TFileVersionInfo.Create(nil);
 
  // Get the file name (including the file path) from the edit-field
  AppFileName := edtFileName.Text;
 
  // Check if the file name is empty
  if AppFileName = '' then
  begin
    ShowMessage('File Name is empty');
    exit;
  end;
 
  // Check if the file exists
  if not (FileExists(AppFileName)) then
  begin
    ShowMessage('File Not Found:' + #13 + AppFileName);
    exit;
  end;
 
  mmoVersionInfo.Lines.Clear;
 
  try
 
    FileVerInfo.FileName := AppFileName;
    FileVerInfo.ReadFileInfo;
 


Die Variable AppFileName hat den Wert C:\Program Files (x86)\System Explorer\SystemExplorer.exe.
Und meine Prüfung, ob die Datei überhaupt existiert, war ja auch erfolgreich.

Ich verstehe wirklich nicht, warum es bei den meisten Anwendungen problemlos funktioniert, nur bei manchen Anwendungen nicht.

Gruß

OLLI
Zuletzt geändert von OLLI_S am Sa 23. Jun 2018, 11:23, insgesamt 1-mal geändert.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
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: Detailinformatioen einer EXE-Datei auslesen

Beitrag von m.fuchs »

OLLI_S hat geschrieben:Allerdings bekomme ich beim Auslesen der Versionsinformationen bei manchen Anwendungen Fehlermeldungen.
Beim System Explorer (C:\Program Files (x86)\System Explorer\SystemExplorer.exe) bekomme ich folgende Meldung:

Code: Alles auswählen

Projekt GerVersionInfo hat Exception-Klasse >EResourceNotFoundException< ausgelöst mit der Meldung:
Can not find resource: Type = 1, Name = 12, Lang ID = 0000

Enthält dieses Programm denn überhaupt Versionsinformationen?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Detailinformatioen einer EXE-Datei auslesen

Beitrag von Mathias »

Genau, wegen diesem Fehler musste ich $R einfügen.
Ohne Versionsangabe kommt bei mir einfach 0.0.0.0.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
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: Detailinformatioen einer EXE-Datei auslesen

Beitrag von m.fuchs »

Mathias, es geht um das Auslesen der Versionsinformationen anderer Programme. Das hat nichts mit {$R *.res} zu tun.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Detailinformatioen einer EXE-Datei auslesen

Beitrag von OLLI_S »

m.fuchs hat geschrieben:Enthält dieses Programm denn überhaupt Versionsinformationen?

Wenn ich die SystemExplorer.exe mit der rechten Maustaste anklicke und "Eigenschaften" wähle, sehe ich auf dem Reiter "Details" alle Versionsinformationen.
Und genau die werden ausgelesen.
Ich verstehe das nicht...

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Detailinformatioen einer EXE-Datei auslesen

Beitrag von OLLI_S »

Hallo,

ich bin heute wieder zum Code gekommen und wollte mir das Problem noch einmal anschauen.

Da die Exceptions in der folgenden Zeile auftreten:

Code: Alles auswählen

 FileVerInfo.ReadFileInfo;

habe ich in der unit fileinfo einen Breakpoint bei der ersten Codezeile in der procedure ReadFileInfo gesetzt.
Aber die Ausführung stoppt nicht dort.

Also habe ich in dieser Zeile [F4] gedrückt um den Code bis hier auszuführen.
Hier wurde mir aber die Meldung gezeigt, dass fileinfo.pp nicht vorhanden ist.
Leider ist der "Start bis Cursor" jetzt auch ausgegraut, so dass ich es nicht erneut versuchen kann.

Wenn ich es richtig sehe, dann ist die Datei C:\lazarus\fpc\3.0.4\source\packages\fcl-base\src\fileinfo.pp geöffnet.
Sorry, wenn ich mich doof anstelle, aber ich habe jetzt viele Jahre nicht mehr programmiert.

Gruß

OLLI

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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: Detailinformatioen einer EXE-Datei auslesen

Beitrag von af0815 »

Der FPC ist normalerweise nicht mit Dedugginginformationen kompiliert. Das ist der Grund warum der Debugger dort nicht stoppt/Debuggen kann.

Abhilfe: Suche hier mal nach FPC mit Debugginginfos zu kompilieren. Auch in der Wiki gibts Informationen dazu.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten