运行Bat文件时出现空白CMD窗口

时间:2012-04-01 03:32:49

标签: c# cmd

嘿所以我一直在处理这个问题。所以,我的程序的一部分要求我访问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窗口,在我关闭它之前不会做任何事情。

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

尝试“start / b SOMECOMMAND”调用您的命令(或者,在您的.bat文件中)