Seite 1 von 1

RunShell() beenden (erledigt)

Verfasst: Mo, 24. Aug 2015 14:39
von Fischkopp
Hallo,
mein altes Thema putty zwecks Datentausch online:
ich kann putty per runshell starten :
runshell(" -load meinenTunnel -pw MeinPasswort","C:\programme\putty\putty.exe",.T.,.F.)
klappt wunderbar, Start in der Anwendung, wenn nötig, Daten schaufeln und fertig. :)

Würde es aber auch gern wieder in der Anwendung beenden statt im cmd-Fenster `exit` einzugeben. #-o

Für einen Tip wäre ich dankbar :D

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 14:55
von Tom
Einfach .T. als letzten Parameter. Dann sieht man auch die Box nicht.
Wenn Du .F. als vorletzten Parameter wählst, wird synchron gestartet. Deine App wartet also, bis der Befehlsprozessor beendet wurde. Du kannst dann statt der CMD-Box einen Wartedialog oder so anzeigen. Und in der nächsten Zeile verschwinden lassen.
Also: Einfach die letzten beiden Parameter vertauschen.

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 15:02
von Tom
Ach so: Es kann dann sinnvoll sein, den Rückgabewert zu betrachten. Im asynchronen Modus (Dein Programm wartet NICHT) ist er 0, wenn die Anwendung gestartet werden konnte, und ansonsten -1. Im synchronen Modus kannst Du den tatsächlichen Code, den das aufgerufene Programm bei der Beendigung erzeugt hast, weiterverarbeiten. Liefert putty.exe z.B. 0 zurück, wenn alle Daten ordentlich verarbeitet werden konnten und kein Fehler auftrat, dann kannst Du das in der Anwendung mitteilen. Du kannst aber auch, wenn putty.exe z.B. eine 2 liefert, weil die Daten nicht gelesen werden konnten, auf Fehlerfälle reagieren.

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 15:20
von georg
Hallo, Tom -


Sinn der putty-Sitzung ist es, während des Xbase++ Programms einen Tunnel bereitzustellen, über den auf Daten (meist SQL-Server) zugegriffen werden kann.


Hallo, Reiner -


eine kurze Recherche ergab mehrere Hinweise auf "sendkeys". Da müsstest Du aber selbst weitersuchen.

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 15:27
von Fischkopp
Hallo, Tom
ganz so einfach ist es wohl nicht :(
Die aufgerufene putty.exe muß ja aktiv sein, um 1- 100 sql-Befehle abzusetzten, synchron geht also nicht.
Die sql-Befehle werden ja nicht direkt mit übergeben, sondern an localhost geschickt !
Ob das Fenster sichtbar ist oder nicht, ist sekundär, z.Zt. zwecks Kontrolle/Test da.

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 15:30
von Tom
Ah. Verstehe.

TaskKill.exe sollte dann helfen. Wäre dann aber ein weiterer Befehlsprozessor.

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 15:34
von Fischkopp
Hallo, Georg
das scheint der Weg zu sein, aber wie finde ich in xBase das Fenster wieder, um es anzusprechen ?
Da mein Programm ja weiterläuft, ist putty im Hintergrund, aber da können ja viele Fenster sein #-o

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 15:38
von Fischkopp
@Tom
ja, wäre ja ok, aber woher nehme ich die `process ID` dieses tasks ?

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 15:43
von Tom
Hat Roger Donnay gerade in seinem Forum erläutert:

Code: Alles auswählen

RunShell('/C TaskList.Exe /V /FO CSV > tasklist.csv')
Geht aber auch beides (TaskList und TaskKill) direkt via API. Musst Du mal suchen, Jimmy hatte Beispiele gepostet, wenn ich mich recht erinnere.

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 15:45
von Tom
Ergänzung: Ich würde beides nicht über den Befehlsprozessor abwickeln, weil das nicht verlässlich ist. Wenn's aber nur um Fensterkosmetik geht, mag das reichen.

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 17:35
von Fischkopp
@Tom
ja schön, soweit geht das mit taskkill, aber trotzdem habe ich noch die Abfrage, ob der Task beendet werden soll.

werde mich wohl doch mit `sendkeys` beschäftigen müssen, soll ja `n simples `exit` kriegen.

Aber heute nicht mehr, nu is Feierabend :lol:

Danke !

Re: RunShell() beenden

Verfasst: Mo, 24. Aug 2015 19:13
von AUGE_OHR
Tom hat geschrieben:Hat Roger Donnay gerade in seinem Forum erläutert:

Code: Alles auswählen

RunShell('/C TaskList.Exe /V /FO CSV > tasklist.csv')
Geht aber auch beides (TaskList und TaskKill) direkt via API.
Musst Du mal suchen, Jimmy hatte Beispiele gepostet, wenn ich mich recht erinnere.
ich finde den Weg von Roger es in eine CSV umzuleiten nicht gerade elegant ...

statt RunShell kann man Pablos TRunProcess.zip verwenden was dir gleich das Handle des aufzurufenden Programms gibt.

Re: RunShell() beenden

Verfasst: Di, 25. Aug 2015 9:51
von brandelh
Einer CMD Box kann man einen eindeutigen Namen geben und diesen über die Windows suchen ...
Mit dem Namen kann man ein Fenster nach vorne bringen oder auch beenden.
Ich vermute aber dass putty noch läuft und es putty ist, das man mit exit schließt oder ?
Ob das dann einfach so abgewürgt werden darf ?

Re: RunShell() beenden

Verfasst: Di, 25. Aug 2015 12:27
von Fischkopp
Hallo, Hubert
die Meldung kommt schon von Putty, abwürgen ist unelegant, da hast du schon recht 8)
Ich werde es so lassen mit der Abfrage, sie aber ans Ende meines Programms stellen, dann ist das
vom Ablauf her sauber und auch für alle anderen Nutzer zu verstehen.
Werde noch sicherstellen, das Putty nicht 2x aufgerufen wird, dann sollte alles schön sein.

Dank an alle und `ne erfolgreiche Woche :)