2016-05-10 6 views
0

Ich habe eine WinForm-Anwendung mit ein paar Arbeiten zu tun und eine Ausgabe mit System.Console Schreiben, Hier ist der Code:Wie laufen und Ausgabe von einer anderen Anwendung kommen C#

static int Main(string[] args) 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    Console.WriteLine("Some String"); 

    return 1; 
} 

Angenommen, wir nennen es SubApp.exe

In einem anderen Programm möchte ich dieses subApp.exe ausführen und den Ausgang lesen, den es mit System.Diagnostics.Process erstellt. Hier ist mein Code:

System.Diagnostics.Process p = System.Diagnostics.Process.Start("SubApp.exe", "Some Parameter"); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.RedirectStandardError = true; 

p.Start(); 
p.WaitForExit(); 

string output = p.StandardOutput.ReadToEnd(); 
string error = p.StandardError.ReadToEnd(); 
int exitCode = p.ExitCode; 

Aber leider beide output und error leer ist und noch schlimmer die exitCode ist 0. Was ist das Problem? Mache ich den Vorgang richtig?

+0

Bitte fügen Sie Ihren tatsächlichen Code und nur weglassen, was Sie bezahlen Ich bin eine private Information. Es ist schwer, mit massiertem und nicht getestetem Code zu arbeiten. Zum Beispiel haben Sie 'System.Diagnosis'. Und genau über meinem Kopf, überprüfen Sie, ob Sie tatsächlich auf die richtige .exe zeigen (vielleicht versehentlich auf Debug statt auf Release oder umgekehrt). – TyCobb

+0

Sie Code ist hier geschrieben 'System.Diagnostics.Process p = System.Diagnosis.Process.Start (" SubApp.exe "," Einige Parameter ");' Sie sollten 'System.Diagnostics.Process p = System.Diagnostics verwenden. Process.Start ("SubApp.exe", "Einige Parameter"); 'Sie haben' Diagnose' – Mostafiz

+0

verwendet und nach der Reparatur funktioniert Ihr Code einwandfrei – Mostafiz

Antwort

0

Machen Sie Ihre SubApp Argument an die Konsole zu schreiben, dann wird es die Konsole an den Prozess ausgegeben Ausgang

static int Main(string[] args) 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    Console.WriteLine(args[0]); // this will print only 'Some' part of argument all string will be in args seperating by space 
    Console.WriteLine(args[1]); // this will print "Parameter" 

    return 1; 
} 

dann rufen Sie Ihren SubApp

System.Diagnostics.Process p = System.Diagnostics.Process.Start("SubApp.exe", "Some Parameter"); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.RedirectStandardError = true; 

p.Start(); 

string output = p.StandardOutput.ReadToEnd(); 
string error = p.StandardError.ReadToEnd(); 

p.WaitForExit(); 

int exitCode = p.ExitCode; 

nach der Ausführung dieser zurückkehren Sie Some Parameter erhalten in Ihre output Variable

+0

Ich habe kein Problem mit Argumenten, Mein Problem ist die Ausgabe des Prozesses, Es ist immer leer. – mostafa8026

+0

meine aktuelle Lösung ist in Ordnung Ich habe sie gerade getestet, stelle sicher, dass deine anderen Dinge in Ordnung sind – Mostafiz

+0

Erstellst du eine winform-Anwendung oder trägst sie einfach? – mostafa8026

Verwandte Themen