Batch starten mit RunShell() [Erledigt]

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Batch starten mit RunShell() [Erledigt]

Beitrag von Jan »

Moin,

Gerade kämpfe ich mit RunShell(). Ich muß aus meiner Anwendung heraus eine Batch aufrufe und dieser Batch einen Parameter mitgeben, den ich in Form einer Variablen vorliegen habe. Das Ganze soll Asynchron laufen.

Kann mir da jemand einen Tipp geben, wie der Aufruf aussehen muß? Ich bekomme das einfach nicht ans Laufen. Egal wie ich das alles zusammenstelle. Manchmal geht sehr kurz ein DOS-Fenster auf, aber zu schnell um lesen zu können, was da drin steht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16511
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Martin Altmann »

Mach doch ans Ende Deiner Batch ein PAUSE, dann kannst Du lesen, was da steht.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Jan »

Der startet einfach nur ein neues CMD-Fenster. Und bleibt am Prompt stehen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16511
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Martin Altmann »

Zeige doch mal den Aufruf der Batch.
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Tom »

Code: Alles auswählen

RunShell(<cParams>,<cCommand>,.T.)
"cParams" könnte z.B. "F:\MyApp\Update\*.*" lauten, "cCommand" etwa "MyCopy.BAT", das dann so aussähe:

Code: Alles auswählen

CD \AppInst
XCOPY %1 .
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Jan »

Hallo Tom,

das ist ja gerade der Punkt. Ich mach das in dieser Variante dann z. B. so (wie gesagt, im Frust habe ich schon alle möglichen und unmöglichen Varianten ausprobiert):

Code: Alles auswählen

RunShell(cVariable, "komm.bat", .T.)
Nix passiert, außer dieses kurz aufblitzende CMD-Fenster, das eben NICHT die Batch-CMD ist.

Insgesamt gesehen liegt das Ganze auf einem PushButton. Die Batch soll also erst aufgerufen werden, wenn man da raufklickt. Der Codeblock sähe dann insgesamt so aus:

Code: Alles auswählen

{|| msgbox(cVariable), RunShell(cVariable, "komm.bat", .T.)}
Die MsgBox() ist da jetzt natürlich nur zur Kontrolle drin, zeigt mir aber den korrekten Wert an.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16511
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Martin Altmann »

Jan,
zeige doch mal den Inhalt deiner Variablen, die Du übergibst! Sind da Leerzeichen drin :?: Dann muss das doppelt gequotet werden :!:
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Jan »

Martin,

nein, keine Leerzeichen in der Variablen. Ein durchgehende String.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Tom »

Außerdem muss "komm.bat" im Ausführungsverzeichnis der Applikation liegen. :wink:
Herzlich,
Tom
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2825
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 96 Mal
Danksagung erhalten: 13 Mal

Re: Batch starten mit RunShell()

Beitrag von georg »

Guten Morgen,


das läuft bei mir:

Code: Alles auswählen

   cCmd := "cmd.exe"
   cCmdLine := "/C smp" + cID + ".cmd"
   nHandle := RunShell(cCmdLine, cCmd, lParallel, lBackGround)
Also, ich rufe CMD.exe auf, und als Parameter übergebe ich

/C => als Parameter an cmd.exe;
smpXYZ.cmd => als Name der Batchdatei, die auszuführen ist

Wenn Parameter an smpXYZ.cmd zu übergeben sind, kann man diese an cCmdLine anhängen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Jan »

Georg,

keine Änderung.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Jan »

Gerade sehe ich, das in der CMD-box, die da aufgeht, irgendwas von "unbekanntem Befehl oder konnte nicht gestartet werden" aufblitzt. Komisch. Denn die Batch exisitiert. Und liegt im gleichen Verzeichnis wie die exe. Und selbst wenn ich in die cCmdLine den kompletten Batch-Pfad eintrage kommt diese Meldung.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16511
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Martin Altmann »

Der Fehler dürfte in der Batch sein!
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Jan »

Tse. Der hat in der aufgerufenen Batch den befehl "Wait" angemeckert, den ich auf Martins Hinweis hin eingebaut hatte.

Nehm ich den raus geht eine CDM-Box auf, die ist komplett leer, geht sofort wieder zu. Und die aufgerufene Batch wird nicht gestartet.

Verrückt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Jan »

Die aufgerufene Batch hat diesen Inhalt:

Code: Alles auswählen

komm %1
exit
Das Programm komm steht im gleichen Verzeichnis. Es gibt da auch keine Fehlermeldung, das es das nicht geben würde. Es wird einfach nur nicht gestartet.

jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16511
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Martin Altmann »

Ich habe nichts von WAIT geschrieben, sondern von PAUSE - richtig lesen :!:
Und schreibe in der batch nicht einfach komm, sondern den kompletten Pfad davor.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Batch starten mit RunShell()

Beitrag von Jan »

Martin,

stimmt, sorry. Falsch gedacht beim tippen.

Aber auch mit kompletten Pfad in der Batch keine Änderung. CMD-Fenster geht auf, da steht auch der Pfad im Prompt drin, in der nächsten zeile wieder nur das Prompt, das Programm wird aber nicht gestartet.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Batch starten mit RunShell() [Erledigt]

Beitrag von Jan »

So. jetzt läuft das. Fragt mich nicht, wo die Änderung liegt. Einfach das Projekt noch einmal komplett neu aufgebaut, und plötzlich ging es.

Vielen Dank für Eure Hilfe und Geduld.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Batch starten mit RunShell() [Erledigt]

Beitrag von brandelh »

Das Ausführungsverzeichnis ist nicht immer das EXE Verzeichnis, daher ist es immer ratsam den PFAD z.B. von der eigenen EXE zu ermitteln und die Batch mit komplettem Pfad aufzurufen.
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Batch starten mit RunShell() [Erledigt]

Beitrag von UliTs »

brandelh hat geschrieben:Das Ausführungsverzeichnis ist nicht immer das EXE Verzeichnis, daher ist es immer ratsam den PFAD z.B. von der eigenen EXE zu ermitteln und die Batch mit komplettem Pfad aufzurufen.
Ich würde sagen, das ist zu 100% ( - 0,000000000000000000001% :D ) der Fehler bei Jan :!:

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Batch starten mit RunShell() [Erledigt]

Beitrag von Tom »

Das Ausführungsverzeichnis ist nicht immer das EXE Verzeichnis
Mmh. Bei Xbase++-Anwendungen, die ja ohne die Runtimes nicht laufen, ist es schon eine originelle Konstellation, die EXE nicht im Ausführungsverzeichnis zu lagern. Oder sie woanders auszuführen.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Batch starten mit RunShell() [Erledigt]

Beitrag von brandelh »

Hallo Tom,

ich musste feststellen, dass je nach Art des Aufrufes das Ausführungsverzeichnis nicht das EXE Verzeichnis war und es kommt vor, dass Fremdprogramm (PDF-Druckertreiber) dieses auch verstellen.
Alle (Xbase++) DLLs werden immer aus dem Verzeichnis der EXE geladen, aber bei RUNSHELL() sollte man sich nicht darauf verlassen. Es kann sein, dass ich mich genau hier irre, aber sicher ist sicher :D
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Batch starten mit RunShell() [Erledigt]

Beitrag von UliTs »

Ich habe exakt die Erfahrung gemacht, die Hubert aufführt.
Bei mir waren es auch PDF-Druckertreiber, die das Ausführungsverzeichnis änderten.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten