2012-04-01 14 views
1

ちょっとこの問題をしばらく扱っています。だから、私のプログラムの一部は私にAdb(アンドロイド開発ブリッジ)にアクセスする必要があり、私はcmdのプロンプトとバットファイルを通してそれを行います。問題は私のプログラムを実行するときに、空の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

なぜあなたは_compiler_として_Process_に名前を付けたのですか?これは無関係かもしれませんが、ちょうど奇妙です。 FileReaderを_Interpreter_またはBufferedReaderを_JITCompiler_のように呼び出すのと同じです。 – ApprenticeHacker

+0

idkちょうどランダムな名前..私はよくそれを行う – Movieboy

答えて

2

をあなたのコマンドを起動する「スタート/ BのSOMECOMMAND」を試してみてください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

+0

問題はありません!本当に答えを捨てるよりも受け入れてくれてありがとう。 :) –

0

私は何が起こっていることは、ストリームが閉じるまで、あなたが読んでいるということだと思うが、それがするまで閉じません(あなたの.batファイルには、代わりに、または)

関連する問題