2012-04-01 5 views
1

Эй, так что я некоторое время занимался этой проблемой. Итак, часть моей программы требует от меня доступа к Adb (мотив разработки Android), и я делаю это через подсказки cmd и bat-файлы. Проблема в том, что при запуске моей программы появляется пустое окно CMD, когда приходит время, чтобы выполнить летучую мышь, и летучая мышь не будет выполняться, пока я не закрою окно CMD. ЛЮБЫЕ идеи почему?Пустые окна CMD при работе файлов Bat

Вот что я пробовал:

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 окно 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 a _JITCompiler_. – ApprenticeHacker

+0

idk просто случайное имя .. Я часто это делаю – Movieboy

ответ

2

Я думаю, что это происходит, что вы читаете, пока поток не закрывается, но не закрывается до push.bat выходов.

Пробуйте использовать события OutputDataReceived и ErrorDataReceived и метод 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

Попробуйте «старт/б SOMECOMMAND» вызов вашей команды (или, в качестве альтернативы, в файле .bat)

Смежные вопросы