2011-07-19 16 views
5

Mam pewne problemy z uruchomionymi procesami i przekazywaniem argumentów do nich. wiem jak uruchomić proces z niektórymi argumentamiPrzekazywanie argumentów do uruchomionego procesu w C#

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c something"); 
Process p = Process.Start(psi) 

Problem polega na tym, że po skrypt jest wykonywany proces jest zakończony. Dlatego istnieje "/ c"

Ale uruchamiam wiele skryptów i chciałbym uruchomić je w jednym procesie ("cmd.exe"), aby za każdym razem nie uruchamiać nowego procesu.

Czy są jakieś rozwiązania?

Mam nadzieję, że ktoś zrozumieć, co mówię;)

+2

Pierwsza myśl, która przychodzi do głowy, to utworzenie pliku wsadowego, chociaż prawdopodobnie jest coś lepszego z [tag: .net]. –

+0

Czy kontrolujesz logikę aplikacji dla programu, do którego próbujesz przekazać argumenty? –

Odpowiedz

10

polecam wykorzystać plik wsadowy do skryptu wykonanie swoich plików wykonywalnych i wywołać plik wsadowy zamiast. Albo you can do this -

Process p = new Process(); 
    ProcessStartInfo info = new ProcessStartInfo(); 
    info.FileName = "cmd.exe"; 
    info.RedirectStandardInput = true; 
    info.UseShellExecute = false; 

    p.StartInfo = info; 
    p.Start(); 

    using (StreamWriter sw = new StreamWriter(p.StandardInput)) 
    { 
     if (sw.BaseStream.CanWrite) 
     { 
      sw.WriteLine("mysql -u root -p"); 
      sw.WriteLine("mypassword"); 
      sw.WriteLine("use mydb;"); 
     } 
    } 
+0

naprawdę nie musisz robić writeline streamwriter. Możesz po prostu wywołać p.startinfo.filename = "cmd.exe"; p.startinfo.Arguments = "bla"; p.start(); p.waitforexit(); p.close(); – Grant

+0

Dzięki, że było bardzo pomocne, ale wciąż mam pewne problemy. – kosa

+0

Próbuję utworzyć proces i uruchomić go w konstruktorze klasy, a następnie wywołać metodę z tej klasy podczas uruchamiania skryptów. Ale kiedy zaczynam proces, to wychodzi w tej samej chwili – kosa

0

Brzmi jak powinien zbadać przekierowanie standardowego wejścia - Należy również ustawić psi.UseShellExecute do false. Prawdopodobnie będziesz także chciał przekierować standardowe wyjście, abyś mógł wiedzieć, co robi twój proces potomny. Przeczytaj więcej o przekierowaniu

+0

Zbyt późno przez włosy - 0A0D ma. – Ben

Powiązane problemy