2010-12-13 32 views
13

qualcuno può dirmi come generare un'altra applicazione di console da un'app Winforms, ma (A) non mostrare la finestra della console sullo schermo e (B) ottenere ancora lo standard output del applicazione? Attualmente ho qualcosa di simile al seguente:C#: Esegui il programma di console esterno come nascosto

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

Se ho impostato RedirectStandardOutput su false, quindi la console app è nascosto come previsto, ma non riesco a ottenere il testo standard output. Tuttavia, non appena ho impostato RedirectStandardOutput su true, la finestra smette di essere nascosta, anche se sono in grado di ottenere l'output del programma.

Quindi, so come rendere l'app della console nascosta, e so come ottenere l'output del programma, ma come faccio a farlo entrambi?

Molti TIA

+0

Qual è il problema con la soluzione attuale? – codymanix

+0

La soluzione precedente mi consente di ottenere l'output dell'app della console, ma la finestra non è nascosta. Se rimuovo il codice per ottenere lo standard output, la finestra * IS * è nascosta. Voglio la finestra nascosta * AND * per ottenere lo standard output. – JamesPD

risposta

33

Ti manca il proprietà CreateNoWindow che deve essere impostato su vero nel tuo caso.

+0

Ah, molte grazie Stefan, è esattamente quello che stavo cercando. – JamesPD

+4

@JamesPD se la risposta di Stefan è stata la risposta che ha risolto il problema, puoi premiarlo e contrassegnarlo come tale accettando la sua risposta - fai clic sul segno di spunta a sinistra della sua risposta. –

0

penso che vi aiuterà a:

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