A megoldás abban rejlik, hogy amikor programból futtatunk egy másikat, akkor lehetőségünk van megadni, hogy mi legyen a standard output. Amikor egy konzol alkalmazás fut és erről nem rendelkezünk külön, akkor alapértelmezésben minden szöveges információ a konzol ablakban jelenik meg. Ha ezt átirányítjuk máshova, akkor lehetőségünk van hozzáférni ezekhez az adatokhoz és így ott jeleníthetjük meg azokat, ahol csak akarjuk, akár egy RichTextBox kontrolban is.
A megvalósítást igen hatékonyan és kultúráltan támogatja a System.Diagnostics névtér Process osztálya. A művelet első lépése, hogy létrehozunk az osztályból egy példányt, majd a ProcessStartInfo osztályból is egyet.
Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo("cmd");
Ez utóbbi konstruktorának paraméterében adjuk meg, hogy melyik alkalmazást indítjuk el, jelen esetben ez a cmd.exe parancssor.
Annak érdekében, hogy a parancssor kimenetét átirányíthassuk, a ProcessStartInfo objektum néhány property-jét be kell állítanunk a megfelelő értékre. Mivel a ki- és bemenetet egyaránt átirányítjuk a művelet sikere érdekében, a RedirectStartadardOutput és a RedirectStandardInput property értékét is igazra kell állítani.
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
Mivel nem szeretnénk, ha a legtöbb esetben fekete parancssori ablak megjelenjen az alkalmazásban, nem engedélyezzük az ablaklétrehozást.
psi.CreateNoWindow = true;
Az átirányítás akkor lehet sikeres, ha a UseShellExecute property értékét FALSE-ra állítjuk.
psi.UseShellExecute = false;
Végül a Process objektum StartInfo property-jének adjuk át a beállított tulajdonságú ProcessStartInfo objektumot, és elindítjuk a műveletet a Start metódussal.
p.StartInfo = psi;
p.Start();
A Standard bemenet írására egy StreamWriter, míg a Standard kimenet olvasására egy StreamReader objektumot hoztunk létre.
StreamWriter sin = p.StandardInput;
StreamReader sout = new StreamReader(p.StandardOutput.BaseStream,System.Text.Encoding.UTF8);
A következő lépésben a bemenetre írjuk a parancssorban végrehajtandó utasítás karakterláncát, vagy is a C:\ meghajtó gyökerében található elemek kilistázását végző “DIR C:\ /o” parancsot.
sin.AutoFlush = true;
sin.WriteLine("dir C:\\ /o");
sin.Close();
A Standard kimeneten keletkező eredményhalmaz bájtjait pedig a Form RichTextBox kontroljában jelenítjük meg. Ehhez a kontrol Text property-jének kell értékül adni a StreamReader objektum olvasási műveletének eredményét.
richTextBox1.Text = sout.ReadToEnd();
Ezt követően tetszőleges műveletet elvégezhetünk az adott adathalmazon.