Absoluter Pfad in Windows Program ermitteln

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Absoluter Pfad in Windows Program ermitteln

Beitrag von hbr »

Hallo,
kann mir jemand helfen?

Ich versuche ein Windows Programm unter "Linus wine" lauffähig zu machen.

In dem Programm werden Pfade für Bilder, die in vielen html Datei eingetragen sind angepasst.
zB. so:

Code: Alles auswählen

file:///C:/Program Files/Ordner/Verzeichniss/pics/buch.gif 
Da das ganze im Browser läuft, benötigt dieser den Absoluten Pfad wo die Dateien sich befinden.

Code: Alles auswählen

file:///home/user/.wine/drive_c/Program Files/Ordner/Verzeichniss/pics/buch.gif
Wie kann ich nun den Absoluten Pfad ermitteln?
Gibt es da eine Möglichkeit?


Gruß

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

Re: Absoluter Pfad in Windows Program ermitteln

Beitrag von Mathias »

Für eine schnelle Lösung könntest du StringReplaced nehmen und diese beiden Pfade austauschen.

"file:///C:/Program Files/" und "file:///home/user/.wine/drive_c/Program Files"
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Absoluter Pfad in Windows Program ermitteln

Beitrag von hbr »

Mathias hat geschrieben: Do 11. Jul 2024, 15:15 Für eine schnelle Lösung könntest du StringReplaced nehmen und diese beiden Pfade austauschen.

"file:///C:/Program Files/" und "file:///home/user/.wine/drive_c/Program Files"
Es geht nicht um das Tauschen, sondern wie frage ich den absoluten pfad ab bzw. wie ermittele ich diesen?
Der ist ja erst einmal völlig unbekannt.
Eine normale Abfrage gibt immer den originalen Windows Pfad zurück,
Also c:/Program Files/......
Und nicht in dieser Form.
/home/user/.wine/drive_c/Program Files/

Wobei der user sich ja auch immer ändert.

Ich kenne mich in Linux total nicht aus.
Die Frage ist ja, ist /home/Karl/.wine/drive_c/.. bei einer Wine Installation immer gleich?
Dann könnte man den Pfad aus den gegebenheiten zusammen bauen.

Wäre interesant, wie man ermittelt ob das Programm in einer wine Umgebung läuft.
Eventuell durch abfrage der Ordner Strucktur?

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Absoluter Pfad in Windows Program ermitteln

Beitrag von Zvoni »

hbr hat geschrieben: Do 11. Jul 2024, 15:34 Ich kenne mich in Linux total nicht aus.
Die Frage ist ja, ist /home/Karl/.wine/drive_c/.. bei einer Wine Installation immer gleich?
Denk doch mal nach......
Du hast ne Linux-Kiste. Auf dieser Kiste ist Wine installiert
Auf dieser Kiste hast du dein eigenes (!!!) Home-Verzeichnis "Karl"
Unterhalb von "Karl" hast du den Ordner ".wine"
Und innerhalb dieses Ordners hast du nen Ordner "drive_c"

Was denkst du, unter welchen Umständen sich dieser Pfad verändern könnte?

Die interessanten Fragen sind eher:
1) Wieso willst du den absoluten Pfad überhaupt wissen?
2) Wieso überhaupt per wine? Mach doch nen Cross-Compile zu Linux. Oder installier dir Lazarus/FPC gleich auf der Linux-Kiste, Projektdateien vom Windows-rechner rüberschieben, kompilieren für Linux. Fertig.
(Zugegeben: Funktioniert natürlich nur, solange du absolut nix OS-spezifisches im Code hast)
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Absoluter Pfad in Windows Program ermitteln

Beitrag von hbr »

Genau,
Prgramm besteht aus 1/3 Windows Speziefischen Rotienen und ist 27Mb groß.

Dann lieber eine Anpassung machen.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 596
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Absoluter Pfad in Windows Program ermitteln

Beitrag von Niesi »

hbr hat geschrieben: Do 11. Jul 2024, 15:04 Hallo,
kann mir jemand helfen?

Ich versuche ein Windows Programm unter "Linus wine" lauffähig zu machen.

In dem Programm werden Pfade für Bilder, die in vielen html Datei eingetragen sind angepasst.
zB. so:

Code: Alles auswählen

file:///C:/Program Files/Ordner/Verzeichniss/pics/buch.gif 
Da das ganze im Browser läuft, benötigt dieser den Absoluten Pfad wo die Dateien sich befinden.

Code: Alles auswählen

file:///home/user/.wine/drive_c/Program Files/Ordner/Verzeichniss/pics/buch.gif
Wie kann ich nun den Absoluten Pfad ermitteln?
Gibt es da eine Möglichkeit?


Gruß


Mit GetCurrentDir wird der absolute Pfadname ermittelt, indem sich die abfragende App befindet.

Mir ist aber nicht ganz klar, was Du mit "... im Browser läuft." meinst ...


DetectPathname.png
DetectPathname.png (13.43 KiB) 1119 mal betrachtet

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  Label1.Caption := GetCurrentDir;
end; 
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Absoluter Pfad in Windows Program ermitteln

Beitrag von hbr »

Zvoni hat geschrieben: Do 11. Jul 2024, 16:00
hbr hat geschrieben: Do 11. Jul 2024, 15:34 Ich kenne mich in Linux total nicht aus.
Die Frage ist ja, ist /home/Karl/.wine/drive_c/.. bei einer Wine Installation immer gleich?
Denk doch mal nach......
Du hast ne Linux-Kiste. Auf dieser Kiste ist Wine installiert
Auf dieser Kiste hast du dein eigenes (!!!) Home-Verzeichnis "Karl"
Unterhalb von "Karl" hast du den Ordner ".wine"
Und innerhalb dieses Ordners hast du nen Ordner "drive_c"

Was denkst du, unter welchen Umständen sich dieser Pfad verändern könnte?

Die interessanten Fragen sind eher:
1) Wieso willst du den absoluten Pfad überhaupt wissen?
2) Wieso überhaupt per wine? Mach doch nen Cross-Compile zu Linux. Oder installier dir Lazarus/FPC gleich auf der Linux-Kiste, Projektdateien vom Windows-rechner rüberschieben, kompilieren für Linux. Fertig.
(Zugegeben: Funktioniert natürlich nur, solange du absolut nix OS-spezifisches im Code hast)
Genau, und der Browser kann die Dateien nur finden über den Absoluten "drive_c" Pfad.
Und den muß ich ermitteln oder zusammenbasteln.

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Absoluter Pfad in Windows Program ermitteln

Beitrag von hbr »

Niesi hat geschrieben: Do 11. Jul 2024, 16:24
hbr hat geschrieben: Do 11. Jul 2024, 15:04 Hallo,
kann mir jemand helfen?

Ich versuche ein Windows Programm unter "Linus wine" lauffähig zu machen.

In dem Programm werden Pfade für Bilder, die in vielen html Datei eingetragen sind angepasst.
zB. so:

Code: Alles auswählen

file:///C:/Program Files/Ordner/Verzeichniss/pics/buch.gif 
Da das ganze im Browser läuft, benötigt dieser den Absoluten Pfad wo die Dateien sich befinden.

Code: Alles auswählen

file:///home/user/.wine/drive_c/Program Files/Ordner/Verzeichniss/pics/buch.gif
Wie kann ich nun den Absoluten Pfad ermitteln?
Gibt es da eine Möglichkeit?


Gruß


Mit GetCurrentDir wird der absolute Pfadname ermittelt, indem sich die abfragende App befindet.

Mir ist aber nicht ganz klar, was Du mit "... im Browser läuft." meinst ...



DetectPathname.png


Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  Label1.Caption := GetCurrentDir;
end; 
Nein eben nicht.
Das Windows Programm gibt in der Wine Umgebung die Typischen Windows Pfade zurück und nicht die Linux Pfade.

Wie ich schon schrieb, muß der Absolute Pfad ermittelt werden.

Ich brauche den Absoluten Pfad dafür, für die Pfadeintragungen in eine html Datei.
Es werden aus über 500 html Schnipsel eine neue html Datei im TEMP Verzeichniß zusammengesetzt mit Bildern die in der „wine „Umgebung in dem Installationsverzeichnis liegen.
Anschließend wird die html Datei im Browser dargestellt und die Bilder benötigen einen Absoluten Pfad zu drive_c, ansonsten werden sie nicht angezeigt.

Wahrscheinlich komme ich nicht drumherum anhand der Ordnerstruktur herauszufinden ob die Windows Anwendung im wine auf einem Linux System läuft und ich dann mir den Absoluten Pfad für den Browser auf dem jeweiligen System zusammen bastele.

Ich dachte es gibt hier vielleicht eine Möglichkeit, den Pfad oder ob die Anwendung in einer wine Umgebung läuft herauszufinden.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 596
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Absoluter Pfad in Windows Program ermitteln

Beitrag von Niesi »

hbr hat geschrieben: Do 11. Jul 2024, 17:00
...

Nein eben nicht.
Das Windows Programm gibt in der Wine Umgebung die Typischen Windows Pfade zurück und nicht die Linux Pfade.

Hast Du schon mal versucht, Dir ein Windowsprogramm zur Pfadermittlung mit Lazarus zu bauen und dies dann auch unter Wine laufen zu lassen?

Das wäre jetzt mein Ansatz - aber ich arbeite gar nicht mit Wine, daher kann ich das auch nicht probieren ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

PascalDragon
Beiträge: 962
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: Absoluter Pfad in Windows Program ermitteln

Beitrag von PascalDragon »

hbr hat geschrieben: Do 11. Jul 2024, 15:04 Wie kann ich nun den Absoluten Pfad ermitteln?
Gibt es da eine Möglichkeit?
Unter der Annahme dass dein Programm erkennen kann, dass es unter Wine läuft, kannt dein Programm in dem Fall das Utility winepath nutzen, um zwischen Wine und Linux Pfaden umzuwandeln.
FPC Compiler Entwickler

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Absoluter Pfad in Windows Program ermitteln

Beitrag von hbr »

Ich habe es jetzt so gelöst, dass ich abfrage, ob das Verzeichnis '/root' existiert und dann wird der ermittelte /home/user/.wine/drive_c/.... Zusammengesetzte Pfad verwendet.

Werde mich einmal in Linux etwas einarbeiten müssen.
Wird aber für mich ein langer Weg werden, da ich überhaupt keinen Plan davon habe.

Mir fehlt die Gesamte Unix Struktur wie z.b. wie die Endung einer auszuführenden Programm Datei ist, Wo, Wie werden Linux Programme installiert (Verzeichnis Struktur), wie und wo wird ein Programm installiert u.s.w.

Antworten