2010-12-13 14 views
13

może ktoś mi powiedzieć, jak spawnować inną aplikację konsoli z aplikacji WinForm, ale (A) nie wyświetla okno konsoli na ekranie i (B) nadal uzyskać standardowe wyjście podanie? Obecnie mam coś jak następuje:C#: Uruchom program konsoli zewnętrznej jako ukryty

Process SomeProgram = new Process(); 
    SomeProgram.StartInfo.FileName = @"c:\foo.exe"; 
    SomeProgram.StartInfo.Arguments = "bar"; 
    SomeProgram.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
    SomeProgram.StartInfo.UseShellExecute = false; 
    SomeProgram.StartInfo.RedirectStandardOutput = true; 
    SomeProgram.Start(); 
    SomeProgram.WaitForExit(); 
    string SomeProgramOutput = SomeProgram.StandardOutput.ReadToEnd(); 

Jeżeli ustawić RedirectStandardOutput false, wówczas aplikacja konsoli jest ukryty zgodnie z oczekiwaniami, ale nie mogę dostać standardowego tekstu wyjściowego. Jednak, gdy tylko ustawię wartość RedirectStandardOutput na true, okno przestaje być ukrywane, mimo że mogę uzyskać wynik programu.

Tak, wiem, jak sprawić, aby aplikacja konsoli była ukryta i wiem, jak uzyskać dane wyjściowe programu, ale jak mogę to zrobić?

Wiele TIA

+0

Jaki jest problem z bieżącego rozwiązania? – codymanix

+0

Powyższe rozwiązanie pozwala uzyskać wyjście aplikacji konsoli, ale okno nie jest ukryte. Jeśli usunę kod do uzyskania standardowego wyjścia, okno * IS * jest ukryte. Chcę ukryć okno * AND *, aby uzyskać standardowe wyjście. – JamesPD

Odpowiedz

33

Ty brakuje CreateNoWindow nieruchomość, która ma być ustawiony na prawdziwej w Twoim przypadku.

+0

Ach, wielkie dzięki Stefan, dokładnie tego szukałem. – JamesPD

+4

@JamesPD, jeśli odpowiedź Stefana była odpowiedzią, która rozwiązała twój problem, możesz go nagrodzić i oznaczyć jako taką, akceptując jego odpowiedź - kliknij pusty dymek po lewej stronie jego odpowiedzi. –

0

myślę, że będzie Ci pomóc:

System.Diagnostics.Process pProcess = new System.Diagnostics.Process(); 
pProcess.StartInfo.FileName = @"C:\Users\Vitor\ConsoleApplication1.exe"; 
pProcess.StartInfo.Arguments = "olaa"; //argument 
pProcess.StartInfo.UseShellExecute = false; 
pProcess.StartInfo.RedirectStandardOutput = true; 
pProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
pProcess.StartInfo.CreateNoWindow = true; //not diplay a windows 
pProcess.Start(); 
string output = pProcess.StandardOutput.ReadToEnd(); //The output result 
pProcess.WaitForExit(); 
Powiązane problemy