嘿所以我一直在处理这个问题。所以,我的程序的一部分要求我访问Adb(android开发桥),我通过cmd提示符和bat文件。问题是我在运行我的程序时,当执行蝙蝠时会出现一个空白的CMD窗口,直到我关闭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 :(得分: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());
答案 1 :(得分:0)
尝试“start / b SOMECOMMAND”调用您的命令(或者,在您的.bat文件中)