myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » [Snippet] Prozess in existierender Kommandozeile starten
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[Snippet] Prozess in existierender Kommandozeile starten

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.453
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

[Snippet] Prozess in existierender Kommandozeile starten

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
24.11.2017 16:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 26.05.2019 13:28