2010-12-13 6 views
13

quelqu'un peut me dire comment frayer une autre application de la console à partir d'une application Winforms, mais (A) montre pas la fenêtre de la console sur l'écran, et (B) toujours obtenir la sortie standard du application? À l'heure actuelle, j'ai quelque chose comme ce qui suit:C#: exécuter le programme de la console externe comme cachée

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

Si je mets RedirectStandardOutput à false, l'application de la console est cachée comme prévu, mais je ne peux pas obtenir le texte de sortie standard. Cependant, dès que j'ai défini le RedirectStandardOutput sur true, la fenêtre cesse d'être masquée, bien que je puisse obtenir la sortie du programme.

Alors, je sais comment faire fonctionner l'application cachée de la console, et je sais comment obtenir la sortie du programme, mais comment puis-je à faire les deux?

Beaucoup TIA

+0

Quel est le problème avec la solution actuelle? – codymanix

+0

La solution ci-dessus me permet d'obtenir la sortie de l'application console, mais la fenêtre n'est pas cachée. Si je supprime le code pour obtenir la sortie standard, la fenêtre * EST * masquée. Je veux que la fenêtre soit cachée * ET * pour obtenir la sortie standard. – JamesPD

Répondre

33

Il vous manque le CreateNoWindow propriété qui doit être réglé sur vrai dans votre cas.

+0

Ah, merci Stefan, c'est exactement ce que je cherchais. – JamesPD

+4

@JamesPD si la réponse de Stefan était la réponse qui a résolu votre problème, vous pouvez le récompenser et le marquer en tant que telle, en acceptant sa réponse - cliquez sur la coche creuse à la gauche de sa réponse. –

0

Je pense que cela vous aidera:

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