Wie kriege ich raus wo meine Anwendung liegt...

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von corpsman »

Servus miteinander,

ich stöbere gerade mal wieder durch diverse Threads hier im Forum und dort gibts den Verweis auf : On Unix there is no "application directory"

Nun meine Anwendung hat 3 Verschiedene Orte wo es Daten verarbeitet
1. Die Konfigurationsdatei => GetAppConfigFile(False)
2. Daten die zwischengespeichert werden (werden zur Laufzeit erzeugt) => GetAppConfigDir(False)
3. Daten die Statisch sind (also von mir mit geliefert werden) und immer nur gelesen werden (z.B. in Icon, Sprachtexte, ...)
Bisher habe ich das gemacht mittels:
Directory := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStrUTF8(0))) + 'gfx' + PathDelim;

Nun geht das gemäß obigem Link unter Linux nicht immer (bei mir und allen meinem Usern war das noch nie ein Problem, da die keine Symlinks einsetzen).

Die Frage ist aber dennoch, wie macht man das richtig ? Wie löst ihr das ?
--
Just try it

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von six1 »

Ich lege meine ausführbare Datei in ein Verzeichnis und erstelle von diesem Basisverzeichnis aus alle benötigten Unterverzeichnisse.

Code: Alles auswählen

  if not directoryexists( extractfilepath(application.ExeName)+'key') then
    mkdir(extractfilepath(application.ExeName)+'key');
 

usw...

Das heißt zwar "application.ExeName" geht aber auch unter Linux :)
Gruß, Michael

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von fliegermichl »

six1 hat geschrieben:Ich lege meine ausführbare Datei in ein Verzeichnis und erstelle von diesem Basisverzeichnis aus alle benötigten Unterverzeichnisse.


Das klappt leider nicht, wenn der Anwender das unter Windows nach C:\Programme\... installiert. Da hat die Anwendung standardmäßig nicht die Berechtigungen. Auch bei Linux wenn z.B. nach /opt/.. installiert wird.

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von six1 »

Nun ja, dann auf Linux bezogen: Im jeweiligen /home/<USER> ein App Verzeichnis erstellen und die Struktur darunter ablegen.
Dafür ist das User-Home ja da 8)
Gruß, Michael

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von kupferstecher »

Hast du schon mal "Application.Location" probiert?
Das sollte genau dafür da sein, habe aber selber keine Erfahrung damit.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von fliegermichl »

kupferstecher hat geschrieben:Hast du schon mal "Application.Location" probiert?
Das sollte genau dafür da sein, habe aber selber keine Erfahrung damit.


Hab ich getestet unter Windows und Linux. Das bringt den richtigen Pfad.
Unter Linux hab ich sogar einen Symlink verwendet und habe den richtigen Pfad bekommen.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von corpsman »

Hmm, wenn man sich das Application.Location mal ansieht, dann läuft das am ende auch wieder auf ein Paramstr(0) heraus.

und das ist ja nicht gut,
The string on ParamStr(0) may contain a directory other than the one of the executable, and it also varies between different shell programs (sh, bash, etc).


@fliegermichl, wenn ich dich Richtig verstehe, sagst du, das genau das geht was im Zitat nicht geht. Muss dann die Wiki seite angepasst werden ?
--
Just try it

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von Socke »

Es gibt ein paar gute Diskussionen zu dem Thema, die das Verhalten unter Linux erklären und auch warum der Warnhinweis im Wiki nicht ganz falsch ist:
Das aufrufende Programm kann den Wert für ParamStr(0) festlegen. Zwar halten sich wohl die meisten Shells daran, es ist aber nicht garantiert.

https://unix.stackexchange.com/question ... ogram-name

Man kann aber aus dem Betriebssystem den Ursprung erfragen:
https://stackoverflow.com/questions/606 ... unix-linux
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von corpsman »

Damit das geht brauche ich also die PID meiner eigenen Anwendung.

Hab grad leider kein Lazarus da, aber ist die PID das gleiche wie die Application.handle ? Dann wäre es "einfacher" ;)
--
Just try it

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von Timm Thaler »

six1 hat geschrieben:Dafür ist das User-Home ja da 8)


Ernsthaft? Lauffähige Programme im Home des Users?

Ich weiss, dass das für Lazarus und FPC auch so empfohlen wird, aber da sind wir nicht mehr weit von Verschlüsselungstrojanern, die im Home des Users liegen, mit Userrechten laufen und die Daten des Users ins Nirwana befördern. Ich finde es äußerst bedenklich, solche Unarten einreißen zu lassen - und muss gleichzeitig zugeben, dass ich für meine eigenen Programme auch keine andere brauchbare Lösung habe.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von Socke »

corpsman hat geschrieben:Damit das geht brauche ich also die PID meiner eigenen Anwendung.

Hab grad leider kein Lazarus da, aber ist die PID das gleiche wie die Application.handle ? Dann wäre es "einfacher" ;)

Application.Handle ist AFAIK nur zur Delphi-Kompatibilität unter Windows vorhanden.
Für *nix gibt es FpGetPid
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von six1 »

Timm Thaler hat geschrieben:
six1 hat geschrieben:Dafür ist das User-Home ja da 8)


Ernsthaft? Lauffähige Programme im Home des Users?

Ich weiss, dass das für Lazarus und FPC auch so empfohlen wird, aber da sind wir nicht mehr weit von Verschlüsselungstrojanern, die im Home des Users liegen, mit Userrechten laufen und die Daten des Users ins Nirwana befördern. Ich finde es äußerst bedenklich, solche Unarten einreißen zu lassen - und muss gleichzeitig zugeben, dass ich für meine eigenen Programme auch keine andere brauchbare Lösung habe.


Naja, wie immer du das auch sehen magst...
In Bezug auf den Verlauf meinte ich damit eher, zusätzliche, zum Programm gehörende Dateien, ins User Home zu legen.
Ich lege allerdings ganze Applikationen im "/home/<User>" ab und achte darauf, dass der User eben kein sudo hat/ist.
Aber wie immer: Der Teufel steckt im Details...
Gruß, Michael

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von Timm Thaler »

six1 hat geschrieben:Ich lege allerdings ganze Applikationen im "/home/<User>" ab und achte darauf, dass der User eben kein sudo hat/ist.


Das schützt aber nur das OS vor einer Schadsoftware, nicht die Userdaten.

Man ist jahrelang davon ausgegangen, dass das Angriffsziel eines Schädlings das OS ist, und hat das entsprechend zugemauert. Bis dann die Verschlüsselungstrojaner kamen...

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von six1 »

hab ich schon verstanden, nur ich habe schon einen mehrschichtigen Aluhut, wohin soll das führen? :mrgreen:
Gruß, Michael

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Wie kriege ich raus wo meine Anwendung liegt...

Beitrag von Timm Thaler »

six1 hat geschrieben:nur ich habe schon einen mehrschichtigen Aluhut, wohin soll das führen?


Bei der Hitze? In den Keller...

Ich hab das ja auf meinem Raspi auch so laufen, mangels Alternativen. Es ist einfach nicht praktikabel, selbst erstellte Programme an denen man auch immer mal rumpfuscht irgendwo in usr/local zu packen, die Konfigs dazu in etc, die Dateien mit denen gearbeitet wird ins home oder nach var... und wenn man dann ein Backup seiner Arbeit machen will sucht man sich nen Wolf wo die Dateien rumlungern.

Antworten