2012-04-01 82 views
1

嘿所以我一直在處理這個問題一段時間。所以,我的程序的一部分需要我訪問Adb(android開發橋),我通過cmd提示符和bat文件來做到這一點。問題是當我運行我的程序時,一個空白的CMD窗口在執行蝙蝠時出現,並且在我關閉CMD窗口之前蝙蝠不會執行。任何想法爲什麼?運行Bat文件時空白的CMD窗口

這裏是我的嘗試:

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

空白CMD窗口。我也試過這個

Process compiler = new Process(); 
     compiler.StartInfo.FileName = "cmd.exe"; 
     compiler.StartInfo.Arguments = " /c push.bat"; 
     compiler.StartInfo.UseShellExecute = false; 
     compiler.StartInfo.RedirectStandardOutput = true; 
     compiler.StartInfo.RedirectStandardError = true; 

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

仍空CMD窗口閃爍光標出現,直到我關閉它纔會做任何事情。

+0

你爲什麼命名爲_Process_ _compiler_?這可能是無關的,但它很奇怪。這就像調用一個FileReader,一個_Interpreter_或一個BufferedReader,一個_JITCompiler_。 – ApprenticeHacker 2012-04-01 03:38:15

+0

idk只是一個隨機的名字..我經常這樣做 – Movieboy 2012-04-01 04:31:06

回答

2

我認爲發生的事情是,你正在閱讀,直到流關閉,但它不會關閉,直到push.bat退出。

嘗試使用OutputDataReceivedErrorDataReceived事件和WaitForExit()方法。

這將讓你異步地讀取數據,並且當你的呼叫通過WaitForExit()呼叫時,你會知道它何時退出。

例子:

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

非常感謝!我終於得到它的工作:) – Movieboy 2012-04-01 04:28:51

+0

沒問題!感謝您實際接受答案而不是放棄它。 :) – 2012-04-01 18:35:47

0

嘗試「啓動/ B SOMECOMMAND」調用你的命令(或者,在你的.bat文件)