2009-03-30 15 views

Odpowiedz

19

Cóż, możesz rozpocząć nowy proces cmd.exe i użyć stdio i stdout do wysyłania i odbierania danych.

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe") 
{ 
    RedirectStandardError = true, 
    RedirectStandardInput = true, 
    RedirectStandardOutput = true, 
    UseShellExecute = false 
}; 

Process p = Process.Start(psi); 

StreamWriter sw = p.StandardInput; 
StreamReader sr = p.StandardOutput; 

sw.WriteLine("Hello world!"); 
sr.Close(); 

Więcej informacji na temat MSDN.

+10

hmm. Nie mogę tego uruchomić w Windows 7 + .NET 4. Zastanawiam się, co się zmieniło ... – LamonteCristo

+1

Nie mogę tego również uruchomić. Proces zostanie rozpoczęty, ponieważ widzę go w Menedżerze zadań, ale okno konsoli nigdy się nie pojawi, niezależnie od tego, co ustawię właściwości 'CreateNoWindow' i' WindowStyle' obiektu ProcessStartInfo. Może jest to związane z uprawnieniami w systemie Windows 7? –

+0

Nie działa również dla mnie na Win 8.1. – Krummelz

-3

Pojedyncza konsola jest dołączona do dowolnego procesu. Krótko mówiąc, nie możesz. Ale są sposoby na "podróbkę".

3

Następujące pożary wyłączają zależną od aplikacji liczbę okien konsoli i przechwytują ilość i parametry konsoli wewnątrz Słownika łańcuchowego, która jest następnie zapętlana w celu wygenerowania wymaganej ilości spawnowanych aplikacji konsolowych. Będziesz potrzebował tylko tych procesów, jeśli tylko odrodzisz jeden z nich.

//Start looping dic recs and firing console 
foreach (DictionaryEntry tests in steps) 
{ 
    try 
    { 
     Process runCmd = new Process(); 
     runCmd.StartInfo.FileName = CONSOLE_NAME; 
     runCmd.StartInfo.UseShellExecute = true; 
     runCmd.StartInfo.RedirectStandardOutput = false; 
     runCmd.StartInfo.Arguments = tests.Value.ToString(); 

     if (cbShowConsole.Checked) 
     { 
      runCmd.StartInfo.CreateNoWindow = true; 
      runCmd.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 
     } 
     else 
     { 
      runCmd.StartInfo.CreateNoWindow = false; 
      runCmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     } 
     runCmd.Start();     
    } 
    catch (Exception ex) 
    { 
     string t1 = ex.Message; 
    } 
} 

Uwaga: jest to przeznaczone do uruchamiania w trybie ukrytym (CreateNoWindow) lub widoczne.

Powiązane problemy