sobota, 22 września 2012

C#: komuniakcja z zewnętrznym procesem

Jakiś czas temu pisałem o uruchamianiu komendy systemowej w języku Java. Jest to technika, którą z powodzeniem wykorzystałem do komunikacji z GDB przy okazji jednego ważnego projektu. Na co dzień sporo pracuję z C#, więc postanowiłem sprawdzić jak mogę uzyskać dokładnie to samo w tym języku. Opiszę jak uruchomić proces, uzyskać dostęp do jego strumieni wejścia i wyjścia, a na koniec pozwolę sobie opisać parę miłych ciekawostek i zastosowań.

W .NET w wersji wyższej niż 1.1. w przestrzeni nazw System.Diagnostics znajdziemy klasę Process. Pozwala ona na uruchomienie oraz komunikację z procesem praktycznie dowolnej aplikacji. Ma ona też parę ciekawych zastosowań, które wymienię pod koniec. Aby uruchomić zewnętrzny proces przyda się jeszcze klasa ProcessStartInfo, która dostarcza odpowiednich parametrów klasie Process. Poniżej prosty przykład odpalający aplikację.

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "WINWORD.EXE";
startInfo.Arguments = f;
Process.Start(startInfo); 

Powyższy przykład pozwoli na uruchomienie MS Word z użyciem opcji startowej f. Oczywiście aplikacja musi być dostępna w systemie, a jej lokalizacja musi być znana systemowi.

Aby czytać i pisać do aplikacji potrzeba wykonać nieco więcej. Konieczne jest ustawienie odpowiednich opcji przy starcie aplikacji, oraz pozyskać strumienie wejścia i wyjścia. W obiekcie ProcessStartInfo musimy ustawić pewne opcje tak jak poniżej. Bez włączonych przekierowań operacje na powiązanych z nimi strumieniami będą powodować rzucenie wyjątku.

startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;

Potem możemy już skorzystać z właściwości procesu:

p.StandardOutput
p.StandardInput;

To na koniec jeszcze małe ciekawostki. Klasa Process pozwala na uruchamianie nie tylko aplikacji, ale także na otwieranie dokumentów, czy stron www. Dla plików jest używana domyślna aplikacja. W ten sposób możemy na przykład dać szansę na podgląd w domyślnej przeglądarce obrazów przed wysłaniem ich gdzieś. Jeśli zaś spróbujemy uruchomić adres www, zostanie odpalona domyślna przeglądarka, a w niej otwarta strona. W ten sposób możemy tworzyć linki, lub opcje w menu odsyłające na przykład na stronę pomocy.

Czytaj też:

Brak komentarzy:

Prześlij komentarz