Ausführbare Datei ohne Pfad

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
Antworten
Peter Dahlmann
Beiträge: 3
Registriert: Do 8. Dez 2022, 18:50

Ausführbare Datei ohne Pfad

Beitrag von Peter Dahlmann »

Mir ist aufgefallen, dass Lazarus bei der Kompilierung den Pfade in dem die Exe erzeugt wurde auch in die erzeugte Exe schreibt.
Beim Aufruf des erzeugten Programmes wechselt Lazarus - wenn aus einem anderen Verzeichnis
aufgerufen - in dieses Verzeichnis - falls es vorhanden ist.
Das kann man testen wenn man dort einen Dateiöffnen-Dialog aufmacht oder auch die Namen der ausführbaren Datei z.B. per Paramstr(0) ausliest.
Kann man dieses Verhalten unterbinden?
Ich habe keine Compileranweisung gefunden die das leistet.
Auf einem gänzlich fremdem Rechner ist das offenbar kein Problem. Dort wird das aktuelle Aufrufverzeichnis genutzt ohne dass ein Fehler geworfen wird.

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: Ausführbare Datei ohne Pfad

Beitrag von af0815 »

Wo werden die Verzeichnisse genau in die EXE geschrieben ?

Das Programmverzeichnis, was auch über paramstr(0) abfragt, muss nicht das aktuelle Verzeichnis sein, im Gegenteil, man darf sich nicht verleiten lassen, das man im Verzeichnis des Programmes steht. Das Verhalten ist Plattformspezifisch. Wenn man das Programm über einen Link startet stimmt das alles nicht zusammen.

Mit dem Dateiöffnen Dialog kann man nichts testen, wo der Öffnet ist ebenso vom Betriebssystem abhängig. Ich habe mich schon öfters über meine eigen Blödheit geärgert, die ganzen Verzeichnisse nicht richtig per Programm vor eingestellt zu haben.

Wenn man gewisse Verzeichnisse erwartet, so muss man selbst dafür sorgen, das die richtig im Programm verwendet bzw. hin gewechselt wird.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
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: Ausführbare Datei ohne Pfad

Beitrag von Winni »

Hi!

Wie af0815 schon sagte:

paramstr (0) gibt genau das zurück, was Du zum Starten eingegeben hast. Nix Anderes.

Falls das Deine Paranoia nicht beruhigt machst Du folgendes:

Auf einem Linux-System gibtst Du ein:

Code: Alles auswählen

strings MeinLazarusBinary > tmp.txt
Und dann siehst Du Dir im Editor ganz in Ruhe den tmp.txt an.
Da stehen jede Menge Namen der Komponenten und Units und fpc verewigt sich auch mehrfach, aber der Pfadname ist weit und breit nicht zu sehen.

Winni

Peter Dahlmann
Beiträge: 3
Registriert: Do 8. Dez 2022, 18:50

Re: Ausführbare Datei ohne Pfad

Beitrag von Peter Dahlmann »

Nochmal: Ich habe in einem Verzeichnis c:\test eine Lazarus Programm compiliert. Nennen wir diese Datei Ergebnis.exe.

Dann wird der Pfad c:\test irgendwie in die Exe-Datei mit aufgenommen.
Das sehe ich auch im Dump der Exe.
Wenn ich die ein weiteres Verzeichnis c:\test1 erstelle und dort die Ergebnis.exe starte dann sieht es so aus als hätte ich sie in c:\test geöffnet.
Datei-öffnen Dialoge, Paramstr(0), GetCurrentDir etc. verweisen alle auf das Verzeichnis c:\test.

Allerdings: wenn ich das ursprüngliche Verzeichnis c:\test lösche oder umbenenne auf sagen wir c:\test2 und dann in c:\test1 die Ergebnis.exe starte, dann verweisen Datei-Öffnen Dialog, Paramstr(0), etc auf c:\test1.

Das kann zu richtig hässlichen Verwechslungen führen.
Offenbar bildet der Compiler in der Exe die aktuellen Pfade zur Compilierungszeit ab - den Zweck habe ich nicht verstanden. Das habe ich ihm aber auch nicht abgewöhnen können.

Benutzeravatar
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: Ausführbare Datei ohne Pfad

Beitrag von Winni »

Peter Dahlmann hat geschrieben:
Do 8. Dez 2022, 20:39
Offenbar bildet der Compiler in der Exe die aktuellen Pfade zur Compilierungszeit ab - den Zweck habe ich nicht verstanden.

Nein!

Bitte erzeuge hier keine Verschwörungstheorien!

Winni

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: Ausführbare Datei ohne Pfad

Beitrag von af0815 »

Wenn ich die exe unter Windows durchsuche nach dem Namen, so finde ich absolut keinen Verweis auf Pfade. Vielleicht dann wenn du die Debuginfos in die Exe hineinkompilieren lässt, das es da Verweise gibt.

Zu Verwechslungen kommt es, wenn dein Programm keine Ahnung hat, wohin es seine Pfade geben soll und alles übernimmt, was das System ihm vorgibt. Ich habe es schon im letzten Post erklärt.

Vor allen, was stört daran, dein Programm hat die Pfade zu verwalten. Damit muss es egal sein, in welchen Pfad es sich befindet. Aber genau das willst du ja bezwecken, nur warum jetzt ein Problem zu haben glaubst, erschliesst sich mir nicht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

PascalDragon
Beiträge: 825
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: Ausführbare Datei ohne Pfad

Beitrag von PascalDragon »

Peter Dahlmann hat geschrieben:
Do 8. Dez 2022, 20:39
Dann wird der Pfad c:\test irgendwie in die Exe-Datei mit aufgenommen.
Das sehe ich auch im Dump der Exe.
Wenn ich die ein weiteres Verzeichnis c:\test1 erstelle und dort die Ergebnis.exe starte dann sieht es so aus als hätte ich sie in c:\test geöffnet.
Datei-öffnen Dialoge, Paramstr(0), GetCurrentDir etc. verweisen alle auf das Verzeichnis c:\test.

Allerdings: wenn ich das ursprüngliche Verzeichnis c:\test lösche oder umbenenne auf sagen wir c:\test2 und dann in c:\test1 die Ergebnis.exe starte, dann verweisen Datei-Öffnen Dialog, Paramstr(0), etc auf c:\test1.
Dann machst du irgendwas falsch. Bitte zeig mal ein einfaches, reproduzierbares Beispiel, mit dem wir das nachstellen können.
Peter Dahlmann hat geschrieben:
Do 8. Dez 2022, 20:39
Offenbar bildet der Compiler in der Exe die aktuellen Pfade zur Compilierungszeit ab - den Zweck habe ich nicht verstanden. Das habe ich ihm aber auch nicht abgewöhnen können.
Das einzige wofür der Compiler den Pfad in die ausführbare Datei packt, ist für die Debuginformationen, diese werden aber nicht zu irgendeiner Pfadauswertung verwendet, sondern wenn überhaupt nur, um bei einem Stacktrace die Quelltextangaben geben zu können.
FPC Compiler Entwickler

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: Ausführbare Datei ohne Pfad

Beitrag von gladio »

Vermutlich sind da alle Debug-Infos in der EXE.
Kann man ausschalten.

Antworten