myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Gemeinschaft (https://www.mycsharp.de/wbb2/board.php?boardid=64)
-- .NET-Komponenten und C#-Snippets (https://www.mycsharp.de/wbb2/board.php?boardid=67)
--- [Snippet] Prozess in existierender Kommandozeile starten (https://www.mycsharp.de/wbb2/thread.php?threadid=119997)


Geschrieben von herbivore am 24.11.2017 um 16:05:
  [Snippet] Prozess in existierender Kommandozeile starten
Beschreibung:

Da ich es irgendwie immer wieder vergesse, was man tun muss, damit ein aus einem Kommandozeilenprogramm gestartetes anderes Kommandozeilenprogramm in der gleichen bzw. sogar derselben bestehenden Console läuft (die bestehende Console also an den neuen Prozess vererbt wird), schreib ich es hier mal auf (für mich und natürlich auch für andere). Es ist ganz einfach: UseShellExecute = false ist der Schlüssel (und nicht CreateNoWindow o.ä., worauf ich immer reinfalle).

Es ist auch nicht nötig, RedirectStandardOutput o.ä. zu verwenden, was neben Problemen mit Puffer und Flush, auch den Nachteil hat, dass etwaige Positionierungsanweisungen und/oder Farben in der Ausgabe verloren gehen, da beim Redirect nur der reine Text übertragen werden würde.

Mit dieser Methode startet man den neuen Prozess in der bestehenden Console:

C#-Code:
public static int StartProcessSync (String cmd, String parms)
{
   var p = new Process ();
   p.StartInfo = new ProcessStartInfo (cmd, parms);
   p.StartInfo.UseShellExecute = false;
   p.Start ();
   p.WaitForExit();
   return p.ExitCode;
}

Das WaitForExit sorgt dafür, dass der alte Prozess erst weiter lauft, wenn der neue beendet ist, also insbesondere erst dann, wenn er seine Ausgabe beendet hat. So kommen sich die beiden Prozesse nicht in die Quere. Und per ExitCode kommt man auch noch "gratis" an den Rückgabecode des aufgerufenen Prozesses.

Schlagwörter: Prozess, Process.Start, starten, erzeugen, ausführen, Console, Consolenprogramm, Kommandozeile, Kommandozeilenprogramm, Kommandozeilen-Programm, existierende, existierenden, bestehende, bestehenden, selbe, selben, gleiche, gleichen, same, geerbte, geerbten, erben, erbende, erbender, inherit, inherited


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 25.05.2020 21:38