Mehrere Console-Befehle mit einem Prozess ausführen
-
Und nochmal ich,
ich habe folgendes Problem ich generiere mir automatischen
Quell-Code durch eines meiner Programme.
Dieser automatisch generierte Quellcode soll unter anderem eine ähnliche
Funktion wie eine herkömmliche Batch-Datei haben.Wenn man das Programm startet für dieses also hintereinander lauter Konsolenbefehle aus.
Mein Problem is nun folgendes:
Da ich vorher nicht weiß wieviel Commands mein Programm ausführen wird habe ich es bisher mit einer for-Schleife gelöst das durch einen Array iteriert
der wiederrum die Commands enthält und diese mit dem befehlsystem("Mein Command");startet.
Leider wartet aber hier ein z.B. zweites Commando nicht auf die beendigung des ersten und so weiter....
Ausserdem wird für jeden auszuführenden Befehl ein eingener cmd.exe-Thread gestartet, was mir gar nicht gefällt.Ich müsste also irgendwie eine Möglichkeit haben an eine Console nacheinander Befehle zu übergeben.
Ich hab mal was von Pipes gelesen, habe mich aber bisher damit noch nicht beschäftigt.
Danke,
G.Ben
PS: Noch ein kleines Problem
Wenn ich folgenden code ausführe wird dies datei leider nicht gestartet.
obwohl die Pfade relativ zum Thread stimmen. Hat jemand eine Idee woran das liegen könnte ?system("template\\MingWUnit\\bin\\build.bat");
-
Benutze start für den Start der Programme. Mit dem Parameter WAIT wird gewartet, bis das Programm beendet ist. Funktioniert aber nicht mit Stapeldateien, wenn diese widerum Programme starten! Hier müssen die einzelnen Programmaufrufe in der Stapeldatei mit START [Programm] /WAIT gestartet werden.
Schau Dir auch mal die anderen Parameter von START (START /?) an.
-
Danke für deine Antwort,
dieses Kommando kann für mich bestimmt hilfreich sein
Aber ich suche noch etwas anderes.
PS: Ausserdem hoffe ich noch auf eine Antwort auf meine erste Frage

Gruß
G.Ben
-
Ich komme mit Deiner Nummerierung nicht ganz klar. Ich meine, dass Deine erste Frage (wartet nicht) damit beantwortet war.
Wie dem auch sei: Wenn Du über system die Programme aufrufst, wird das jeweilige Laden des Systems nicht zu vermeiden sein. Sonst bleibt nur die Möglichkeit, die Programme direkt über die WinAPI zu starten.
Bezüglich der nicht startenden Stapeldatei würde ich auf ein Verzeichnisproblem tippen. Ist das aktuelle Verzeichnis auch das Verzeichnis, von welchem Du beim Programmaufruf ausgehst?
-
Ja Verzeichnisse stimmen das habe ich überprüft. Das können wir leider ausschließen.
Ich versuchs jetzt mal mit deiner Start-Anweisung vielleicht habe ich da mehr Glück.Danke nochmal,
Gruß G.Ben
-
Manfred Schmidtke schrieb:
Wie dem auch sei: Wenn Du über system die Programme aufrufst, wird das jeweilige Laden des Systems nicht zu vermeiden sein. Sonst bleibt nur die Möglichkeit, die Programme direkt über die WinAPI zu starten.
Was bedeutet, ein Programm direkt über die WinAPI starten?

Ich möchte aus meinem Programm heraus ein anderes aufrufen, bis zur Beendigung des externen warten und dann weiterarbeiten.
Was gibt's ausser system() für Möglichkeiten?
-
Z. B. über die WinAPI mit CreateProcess und MsgWaitForMultipleObjects.
Bei Interesse kann ich auch eine fertige Klasse hochladen, mit welcher wir diverse Stapeldateien und ausführbare Konsolenprogramme starten. Die Klasse liegt aber leider nur in Delphi vor, sollte sich aber einfach übersetzen lassen.