Jak wywołać inny program (proces) z programu w c#?

19-lut-2011

Dziś zmierzyłem się z zadaniem wywołania innego programu z C#. W tym przypadku miałem zaczekać na zakończenie działania tego nowego procesu, a następnie kontynuować swoje działania.

Z pomocą przyszła mi klasa System.Diagnostics.ProcessStartInfo, która została obudowana tak, by po prostu wywołać metodę przekazując do niej jedynie ścieżkę do porogramu, który ma być uruchomiony.  Do konstruktora należy przekazać, jaki program chcesz uruchomić.

Po kolei. Najpierw należy wypełnić strukturę ProcessStartInfo. Zaczynamy od konstruktora. Jeżeli chcesz uruchomić zadanie z wykorzystaniem linii komend cmd, to wywołaj program cmd z przełącznikiem /c. Przełącznik ten informuje cmd, że po zakończeniu wywoływanego programu, cmd również ma się zakończyć. Po przełączniku cmd, powinna się znajować ścieżka do nowego uruchamianego programu.

Jeżeli chcesz przekserować domyślne wyjście kranu do pliku lub strumienia użyj

        procStartInfo.RedirectStandardOutput = true;

Aby ukryć okno programu cmd, użyj:

        procStartInfo.CreateNoWindow = true;

 Aby uruchomienie nie odbywało się przez Shell Windows ustaw:

        procStartInfo.UseShellExecute = false;

 Uruchomienie procesu odbywa się za pomocą: System.Diagnostics.Process. Podpinasz do niego wypełnione ProcessStartInfo i uruchamiasz.

 Jeżeli interesuje Cię, co program wyświetliłby na kosoli przeczytaj zawartość całego strumienia StandardOutput.

 public static string ExecuteCommandSync(object command)
{
    string output = „”;
    try
    {
        System.Diagnostics.ProcessStartInfo procStartInfo =
           new System.Diagnostics.ProcessStartInfo(„cmd”, „/c ” + command);
        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;
        procStartInfo.CreateNoWindow = true;
 
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo = procStartInfo;
        proc.Start();
        output = proc.StandardOutput.ReadToEnd();
    }
    catch (Exception objException)
    {
        // Log the exception
    }
    return output
}

Gotowe! Smacznego!

Komentarze są wyłączone

Autor: Rafał Kraik