Sunt situatii in care din aplicatia pe care o scriem avem nevoie sa pornim o alta aplicatie. Daca lucram in .Net asta se face cu ajutorul clasei Process aflata in namespace-ul System.Diagnostics. Astazi o sa fac o scurta prezentare a acestei clase, urmand ca in viitor sa revin cu mai multe detalii si mai multe exemple.
Ce putem face, simplu, cu ajutorul acestei clase. Sa pornim, de exemplu, un notepad! La ce ne trebuie? Deocamdata nu ne trebuie, e doar un exemplu:
using System.Diagnostics; //.... cod static void Main(string[] args) { Process p = new Process(); p.StartInfo = new ProcessStartInfo("notepad.exe"); p.Start(); } //.... cod
Codul de mai sus, asa cum ai ghicit, deschide o sesiune de notepad. notepad.exe se poate inlocui cu orice alt executabil (cale absoluta, relativa, numele executabilului daca el este definit prin nu stiu ce variabile de system).
Insa nu e singura posibilitate. Nume aplicatiei poate fi inlocuit cu… un url. Codul devine:
//…. cod
static void Main(string[] args)
{
Process p = new Process();
p.StartInfo = new ProcessStartInfo(“http://google.com/”);
p.Start();
}
//…. cod
care, evident, va deschide browserul default al sistemului si va incarca pagina specificata (google in cazul asta).
Odata pornit, un proces poate fi controlat in diverse feluri. Un mod de a controla un process este sa il opresti. Asta se face cu ajutorul metodei Kill() asociata obiectului:
using System.Diagnostics; //.... cod static void Main(string[] args) { Process p = new Process(); p.StartInfo = new ProcessStartInfo("notepad.exe"); p.Start(); Thread.Sleep(2000); //asteapta 5 secunde p.Kill(); } //.... cod
Asa cum se observa, obiectul de tip Process are o proprietate p.StartInfo de tip ProcessStartInfo unde se definesc practic parametrii procesului care va fi pornit.
Cred ca destul de utila este pornirea unui proces care reprezinta o aplicatie de tip consola. Aceasta difera un pic de procesele de tip fereastra, prin faptul ca din consola se primesc date (output-ul consolei) sau, eventual, se transmit date. Pentru a executa si primi output-ul unei aplicatii de tip consola se procedeaza asa:
using System.Diagnostics; //.... cod static void Main(string[] args) { Process p = new Process(); ProcessStartInfo psi = new ProcessStartInfo(externalConsoleApp); //calea spre aplicatia console psi.CreateNoWindow = false; //nu vreau sa fie creata fereastra aplicatiei psi.RedirectStandardOutput = true; //vreau sa redirectez StandardOutput pt a-l putea citi psi.UseShellExecute = false; //trebuie setata false pt a putea redirecta StandardOutput p.StartInfo = psi; p.Start(); while (!p.StandardOutput.EndOfStream) { Console.Write(Char.ConvertFromUtf32(p.StandardOutput.Read())); //Console.WriteLine(p.StandardOutput.ReadLine()); //citeste linie cu linie //Console.WriteLine(p.StandardOutput.ReadToEnd()); //citeste tot out-put-ul ca bloc - nu trebuie executat in block while. } Console.WriteLine(); Console.WriteLine("Exit code: {0}", p.ExitCode); Console.ReadKey(); } //.... cod