Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   [schon gelöst] Program für wine (Linux) erstellen bzw. weiter laufen lassen (https://www.delphipraxis.net/192786-%5Bschon-geloest%5D-program-fuer-wine-linux-erstellen-bzw-weiter-laufen-lassen.html)

Schwedenbitter 18. Mai 2017 16:57


[schon gelöst] Program für wine (Linux) erstellen bzw. weiter laufen lassen
 
Folgende Problemstellung treibt mich um:

Ich habe seit ca. 10 Jahren ein Client-Server-Gespann, wobei der Server auf einem Linux-Rechner in einer virtuellen Windows XP-VM läuft. Das ganze ist ein Windows-Programm mit einem Diese VM gibt es nur wegen des Server-Programms. Insbesondere aus Sicherheitsaspekten soll die VM plattgemacht und das Server-Programm mit wine laufen. Die Details würden den Rahmen hier sprengen - meinetwegen aber als PN...

Ich habe nun ein Gerüst gebastelt, was soweit in einer Linux-Konsole auch läuft. Es stört mich aber, dass dazu immer eine Anmeldung (am Rechner oder mit PuTTY) notwending ist. Sobald man sich abmeldet oder eben PuTTY schließt, läuft der Server nicht mehr. Ich habe auch diverse Anleitungen gelesen. Ein einfaches
Delphi-Quellcode:
wine meine.exe & quit
reicht jedenfalls nicht.

Wie kann man ein Programm (nur TSR?) erstellen, was unter wine im Hintergrund läuft?

Ich hoffe, das ist nicht zu OT und wenigstens in der richtigen Rubrik.

Gruß, Alex

mjustin 18. Mai 2017 17:06

AW: Program für wine (Linux) erstellen
 
Anstatt Anwendungen mit & in den Hintergrund zu senden, kann man auch mit screen arbeiten. Jede screen Instanz läuft unabhängig, auch nach dem Abmelden. Mit einer Lazarus/Indy Serveranwendung unter Ubuntu auf einem Webhoster lief das stabil.

Zu screen gibt es viele Informationen und Anleitungen im Netz.

Schwedenbitter 18. Mai 2017 17:39

AW: Program für wine (Linux) erstellen
 
Zitat:

Zitat von mjustin (Beitrag 1371967)
Anstatt Anwendungen mit & in den Hintergrund zu senden, kann man auch mit screen arbeiten. Jede screen Instanz läuft unabhängig, auch nach dem Abmelden. Mit einer Lazarus/Indy Serveranwendung unter Ubuntu auf einem Webhoster lief das stabil.

Zu screen gibt es viele Informationen und Anleitungen im Netz.

Volltreffer!:dp:

Recht herzlichen Danke dafür. Du glaubst nicht, wie lange ich bei wine nach einer Lösung gesucht habe.

Die man-pages von screen finde ich ziemlich verwirrend. Ich habe es aber auch so geschafft. Leerzeichen muss man unter Linux meist explizit escapen, daher die Backslashes. Damit andere auch etwas davon haben, hier ein Beispiel-Aufruf. So oder so ähnlich müsste es dann bei Dir auch ausgesehen haben:
Code:
screen `wine /home/ein\ langer\ Pfad\meine.exe`

Dalai 18. Mai 2017 18:52

AW: [schon gelöst] Program für wine (Linux) erstellen bzw. weiter laufen lassen
 
Unabhängig vom eigentlichen Problem: Die Backticks sind echt nicht totzukriegen, wa? Bitte verzichtet auf Backticks! Die Dinger haben nur Nachteile: sie lassen sich nicht schachteln und sie sind viel zu leicht mit einfachen Anführungszeichen zu verwechseln (oder man übersieht sie komplett), und deren Eingabe is auch ... naja.

Stattdessen bieten sich die viel einfacher zu tippenden normalen Shellklammern an. Nebenbei müssen Leerzeichen in einem Pfad nicht zwingend escaped werden, Anführungszeichen funktioneren genauso (einfache oder doppelte spielt keine Rolle, solange keine Variablen innerhalb benutzt werden). Diese beiden Dinge zusammengebracht und der Befehl kann so aussehen:
Code:
screen $(wine "/irgendein pfad mit leerzeichen/programm.exe")
. Das ließe sich sogar schachteln, wenn man es will oder braucht, hier ein Sinnlosbeispiel:
Code:
screen $(ls -l $(which eine.exe))
Viel lesbarer, oder?

Grüße
Dalai

Schwedenbitter 18. Mai 2017 20:23

AW: [schon gelöst] Program für wine (Linux) erstellen bzw. weiter laufen lassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
<OT>
Zitat:

Zitat von Dalai (Beitrag 1371975)
... Bitte verzichtet auf Backticks!

Alle andere ja, ich nicht. Ich editiere regelmäßig mit mc und dessen syntax highlight. Backticks haben den Charme, dass man wegen der schwarzen Markierung exakt sieht, wie lang ein Befehl ist und was genau drin steht.

Zitat:

Zitat von Dalai (Beitrag 1371975)
Nebenbei müssen Leerzeichen in einem Pfad nicht zwingend escaped werden, Anführungszeichen funktioneren genauso (einfache oder doppelte spielt keine Rolle, solange keine Variablen innerhalb benutzt werden).

Ich habe keine Lust auf Streit und auch eigentlich überhaupt keine Zeit für sowas. Aber ich kann Dir - falls mir wieder welche über den Weg laufen - einige Befehle unter Linux per PM aufzeigen, bei denen das notwendig ist. Ich arbeite viel auf der Konsole unter openSUSE und da hat man mit <tab> immer escaped Leer- und Sonderzeichen drin. Warum sollte ich die nicht gleich nutzen?

Zitat:

Zitat von Dalai (Beitrag 1371975)
Diese beiden Dinge zusammengebracht und der Befehl kann so aussehen:
Code:
screen $(wine "/irgendein pfad mit leerzeichen/programm.exe")
...

Mag eleganter aussehen. Aber bei Dollar, Klammer auf und zu muss man sich auch konzentrieren. Wer oft ein Backtick nutzt, dem geht die Eingabe leicht von der Hand - bei amerikanischen Tastaturen allemal.
</OT>

Dalai 18. Mai 2017 21:33

AW: [schon gelöst] Program für wine (Linux) erstellen bzw. weiter laufen lassen
 
[OT]
Zitat:

Zitat von Schwedenbitter (Beitrag 1371985)
Ich editiere regelmäßig mit mc und dessen syntax highlight. Backticks haben den Charme, dass man wegen der schwarzen Markierung exakt sieht, wie lang ein Befehl ist und was genau drin steht.

Das sieht man bei Subshellklarmmern ebenfalls, auch wenn ich zugebe, dass die Syntaxhervorhebung innerhalb dieser im MC fehlt. Aber das ist halt kein umfangreicher Editor sondern ein Dateimanager mit ein paar Editierfähigkeiten. Aber lassen wir das, denn ich verwende ihn ebenfalls täglich :). Nano kann das übrigens für beide Varianten.

Zitat:

Aber ich kann Dir - falls mir wieder welche über den Weg laufen - einige Befehle unter Linux per PM aufzeigen, bei denen das notwendig ist.
Solange ein String in einfachen Anführungszeichen eingeschlossen ist, wird er so, wie er ist, übernommen. Da ist kein Escaping notwendig. Bei doppelten Anführungszeichen mag das anders aussehen, weil dort Variablenexpansion stattfindet.

Zitat:

Ich arbeite viel auf der Konsole unter openSUSE und da hat man mit <tab> immer escaped Leer- und Sonderzeichen drin. Warum sollte ich die nicht gleich nutzen?
Für die Completion lasse ich die ebenfalls stehen. Aber ich würde nie auf die Idee kommen, ein unübersichtliches und potentiell fehleranfälliges (z.B. weil unvollständig) Escaping in einem Skript zu benutzen. Richtig eklig wird das, wenn ein Pfad mit solchen escape-Backslashes in einer Zeile steht, dir ihrerseits wegen der Länge umgebrochen wird - ebenfalls mit Backslash. "Welcher Backslash gehört nun wohin?" muss man da erst überlegen.

Zitat:

Wer oft ein Backtick nutzt, dem geht die Eingabe leicht von der Hand - bei amerikanischen Tastaturen allemal.
Das stimmt. Aber man macht es Skripteinsteigern schwerer, wenn man nicht dazu sagt, dass es Backticks sind, welche Nachteile sie haben und dass sie ersetzbar sind.

[/OT]

Grüße
Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz