RunShell() beenden (erledigt)

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

RunShell() beenden (erledigt)

Beitrag 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
Zuletzt geändert von Fischkopp am Di, 25. Aug 2015 12:27, insgesamt 1-mal geändert.
Grüße aus Berlin

Reiner
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: RunShell() beenden

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: RunShell() beenden

Beitrag 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.
Herzlich,
Tom
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: RunShell() beenden

Beitrag 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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

Re: RunShell() beenden

Beitrag 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.
Grüße aus Berlin

Reiner
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: RunShell() beenden

Beitrag von Tom »

Ah. Verstehe.

TaskKill.exe sollte dann helfen. Wäre dann aber ein weiterer Befehlsprozessor.
Herzlich,
Tom
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

Re: RunShell() beenden

Beitrag 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
Grüße aus Berlin

Reiner
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

Re: RunShell() beenden

Beitrag von Fischkopp »

@Tom
ja, wäre ja ok, aber woher nehme ich die `process ID` dieses tasks ?
Grüße aus Berlin

Reiner
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: RunShell() beenden

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: RunShell() beenden

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

Re: RunShell() beenden

Beitrag 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 !
Grüße aus Berlin

Reiner
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: RunShell() beenden

Beitrag 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.
Dateianhänge
TRunProcess.zip
need ot4xb
(3.95 KiB) 236-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: RunShell() beenden

Beitrag 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 ?
Gruß
Hubert
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

Re: RunShell() beenden

Beitrag 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 :)
Grüße aus Berlin

Reiner
Antworten