Ausführbare Datei ohne Pfad
-
- Beiträge: 3
- Registriert: Do 8. Dez 2022, 18:50
Ausführbare Datei ohne Pfad
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.
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.
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- 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
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.
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).
- 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
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:
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
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
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
-
- Beiträge: 3
- Registriert: Do 8. Dez 2022, 18:50
Re: Ausführbare Datei ohne Pfad
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.
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.
- 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
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
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- 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
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.
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).
-
- Beiträge: 954
- 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
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 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 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.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.
FPC Compiler Entwickler
- gladio
- Beiträge: 223
- 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
Vermutlich sind da alle Debug-Infos in der EXE.
Kann man ausschalten.
Kann man ausschalten.