2012-04-01 9 views
1

Hey, ich habe mich schon eine Weile mit diesem Problem beschäftigt. Also, ein Teil meines Programms erfordert, dass ich auf Adb (Android-Entwicklungsbrücke) zugreifen, und ich tue das über cmd Prompt und bat-Dateien. Das Problem ist, dass wenn ich mein Programm starte, ein leeres CMD-Fenster auftaucht, wenn es Zeit ist, den Schläger auszuführen, und der Schläger wird nicht ausgeführt, bis ich das CMD-Fenster schließe. Eine Idee warum?Leere CMD-Fenster beim Ausführen von Bat-Dateien

Hier ist, was ich versucht:

Process compiler = new Process(); 
     compiler.StartInfo.FileName = "push.bat"; 

     compiler.StartInfo.UseShellExecute = false; 
     compiler.StartInfo.RedirectStandardOutput = true; 
     compiler.StartInfo.RedirectStandardError = true; 

     compiler.Start(); 
     string d = compiler.StandardOutput.ReadToEnd(); 
     MessageBox.Show(d); 

Blank Fenster CMD. Ich habe es auch versucht

Noch leer CMD-Fenster mit blinkenden Cursor kommt, die nichts tun wird, bis ich es schließe.

+0

Warum Sie eine _Process_ als _compiler_ Namen hat? Dies mag irrelevant sein, aber es ist einfach komisch. Es ist, als würde man einen FileReader mit einem _Interpreter_ oder einem BufferedReader oder einem _JITCompiler_ aufrufen. – ApprenticeHacker

+0

IDK nur ein zufälliger Name .. ich mache das oft – Movieboy

Antwort

2

Ich denke, was passiert ist, dass Sie lesen, bis der Strom geschlossen wird, aber es lässt sich nicht schließen, bis push.bat beendet. Verwenden Sie die OutputDataReceived und ErrorDataReceived Ereignisse und die WaitForExit() Methode.

Damit können Sie die Daten asynchron lesen und Sie werden wissen, wann es beendet wird, wenn Ihr Anruf den WaitForExit()-Aufruf passiert.

Beispiel:

Process compiler = new Process(); 
compiler.StartInfo.FileName = "push.bat"; 
compiler.StartInfo.UseShellExecute = false; 
compiler.StartInfo.RedirectStandardOutput = true; 
compiler.StartInfo.RedirectStandardError = true; 

var d = new StringBuilder(); 
compiler.OutputDataReceived += (o, e) => d.AppendLine(e.Data); 
compiler.ErrorDataReceived += (o, e) => d.AppendLine(e.Data); 
compiler.Start(); 
compiler.WaitForExit(); 
MessageBox.Show(d.ToString()); 
+0

Vielen Dank !! Ich habe es endlich zur Arbeit gebracht :) – Movieboy

+0

Kein Problem! Danke, dass du tatsächlich eine Antwort akzeptierst, anstatt sie aufzugeben. :) –

0

Versuchen Sie „Start/b einKommando“ Aufruf Ihren Befehl (oder alternativ in Ihrer .bat-Datei)

Verwandte Themen