2010-12-13 10 views
13

herhangi bir Winforms uygulamasından başka bir konsol uygulamasının nasıl oluşturulduğunu bana söyleyebilir, ancak (A) konsol penceresini ekranda göstermez ve (B) yine de standart çıktısını alabilir. uygulama? Şu anda aşağıdaki gibi bir şey vardır:C#: Harici konsol programını gizli olarak çalıştır

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(); 

ben false, daha sonra beklendiği gibi konsol uygulaması gizlenir, ancak standart çıktı metnini alamayan RedirectStandardOutput ayarlarsanız. Ancak, RedirectStandardOutput öğesini true olarak ayarladığım zaman, programın çıktısını alabilsem de pencere gizlenmeyi durduruyor.

Konsol uygulamasının nasıl gizlendiğini biliyorum ve programın çıktısını nasıl alacağımı biliyorum, ancak her ikisini de nasıl yapabilirim?

TIA

+0

akım çözüm sorun nedir? – codymanix

+0

Yukarıdaki çözüm, konsol uygulamasının çıktısını almama izin veriyor, ancak pencere gizlenmiyor. Standart çıktı almak için kodu kaldırırsam, pencere * IS * gizlenir. Standart çıktıyı almak için pencerenin * AND * gizlenmesini istiyorum. – JamesPD

cevap

33

Davandan içinde gerçek için ayarlanmış olması gerekir CreateNoWindow özelliği eksik Birçok.

+0

Ah, çok teşekkürler Stefan, tam olarak aradığım şey bu. – JamesPD

+4

@JamesPD Eğer Stefan'ın cevabı senin problemini çözen bir cevapsa, onu ödüllendirebilir ve cevabını kabul ederek bu şekilde işaretleyebilirsin - cevabının solundaki oyuk kene üzerine tıkla. –

0

Ben size yardımcı olacaktır düşünüyorum:

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();