Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[Snippet] Prozess in existierender Kommandozeile starten
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

[Snippet] Prozess in existierender Kommandozeile starten

beantworten | zitieren | melden

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:


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
private Nachricht | Beiträge des Benutzers