Lade...
 

CX_SYSTEM_OBJECT::RunSystemShell

CX_SYSTEM_OBJECT::RunSystemShell

Beschreibung:

Diese Klassenfunktion übergibt Parameter an den Kommandointerpreter des Betriebssystems. Wie bei System2 geht (standardmäßig) kein Fenster auf und der Befehl läuft im Hintergrund ab. Im Gegensatz zu den anderen Befehlen, die Programme starten, legt RunSystemShell die Konsolenausgabe (stdout & stderr) als STRING auf dem Stack.

Wird RunSystemShell mit einem STRING aufgerufen, dann wird dieser STRING an CMD.exe /C übergeben. Für das Aufrufen von .bat-Dateien und CMD-Befehlen, sowie einfachen Programmen reicht dies im Normalfall, kann aber bei komplizierten Parametern (vor allem, wenn sie Leerzeichen enthalten) zu Problemen führen. Hierbei können auch Dateien angegeben werden, die nicht direkt ausführbar sind, aber an eine Anwendung gebunden sind (.txt = Editor, .jpg = Bildbetrachter, .rb = Ruby-Interpreter, ...).

Für den Fall kann man RunSystemShell einen Vektor von STRINGS (es wird keine implizite Konvertierung nach STRING durchgeführt!) übergeben. Dabei wird das erste Element des Vektors als ausführbare Datei interpretiert. Hierbei kann es sich um den Namen einer ausführbaren Datei im Pfad handeln (cmd.exe, ..) oder um einen absoluten Pfad zu einer Datei. Die restlichen Elemente werden als Argumente interpretiert, wobei jedes Element ein Argument darstellt. Die Argumente können Leerzeichen enthalten, ohne Probleme zu verursachen. 
Wichtig: Das erste Argument muss ausführbar sein. (Es muss ein entsprechender ASSOC-Eintrag für die Dateiendung und ein FTYPE-Eintrag für den Dateityp vorhanden sein)

Hinweis: Aktuell unterstützt RunSystemShell für den Dateipfad und die Parameter nur den Zeichensatz Windows-1252. Unicode-Sonderzeichen, die darin nicht enthalten sind, dürfen für RunSystemShell somit nicht im Pfad oder in den Parametern vorkommen, da sie dann falsch (als "?") übertragen werden.

229208 kann als letzter Parameter im Vektor ein INTEGER übergeben werden, der die Codepage definiert, in welcher die Ausgabe interpretiert werden soll (=850 falls nicht angegeben). Die Übergabe der Option per CX_JSON_OBJECT (s.u.) ist zu bevorzugen.
Folgende Werte werden aktuell unterstützt:

Wert Codepage
850 CX850
1252 Windows-1252
8 UTF-8
88591 ISO 8859-1
230751
885915 ISO 8859-15
230751

 

230751 unterstützt RunSystemShell die Übergabe der Ausgabecodepage in Form eines CX_JSON_OBJECTs, welches in dem Vektor zusammen mit den restlichen Parametern übergeben wird. Zudem lässt sich über dieses Options-JSON auch steuern, ob und wie der gestartete Prozess seine Fenster öffnet.

Options-JSON
Feldname Beschreibung Unterstützte STRING-Werte Unterstützte INTEGER-Werte
codepage

Die Codepage, in welcher die Konsolenausgabe
des Prozesses interpretiert werden soll.

"utf8", ("cx850", "cp850"), ("cp1252", "ansi", "windows1252"), "iso8859-1", "iso8859-15" 8, 850, 1252, 88591, 885915
display

Steuert die Sichtbarkeit der vom Kindprozess geöffneten Fenster. Hat nur einen Einfluss auf das erstmalige Öffnen.

"hide" - Fenster nicht öffnen (default)
"show" - Fenster normal öffnen
"maximize" - Fenster maximiert öffnen
"minimize" - Fenster minimiert öffnen
0-11

 


Diese Funktion kehrt erst zurück, wenn das Kommando ausgeführt wurde.

Code-Beispiel:
//Search for cmd.exe in path with "where" "where cmd" SystemObject Call(RunSystemShell) //-> STRING("C:\Windows\System32\cmd.exe\r\n") //Output a simple string via ECHO "ECHO Hello World" SystemObject Call(RunSystemShell) //-> STRING("Hello World\r\n") //Call cmd.exe via vector [ "cmd" "/c" "ECHO Hello World" ]  SystemObject Call(RunSystemShell) //-> STRING("Hello World\r\n") //Call where.exe for not existing file [ "where" "notexisting" ] SystemObject Call(RunSystemShell) //-> STRING("INFORMATION: Es konnte keine Datei... //Evaluate NodeJS-Script with spaces in argument (requires a nodejs installation to work) [ "node" "-e" "console.log('Hello World')" ] SystemObject Call(RunSystemShell) //-> STRING("Hello World\n") [ "osversion.bat" ]  SystemObject Call(RunSystemShell) //-> STRING("ObjectStore Release 2013....

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top
STRING | VECTOR<STRING|CX_JSON_OBJECT>
CMD Befehl | Programm
Stack(Out) Top STRING Konsoleninhalt
Funktionsaufruf: Call(RunSystemShell)