我的目标是从C#执行外部.bat文件。问题是我必须在我的表单中显示已执行的Bats的结果,而不是在控制台中。谷歌上的解决方案只向我展示如何启动蝙蝠,而不是如何从控制台获取内容。
实现这一目标的最佳方式是什么?
答案 0 :(得分:4)
您可以在Process类中使用StandartOutputEvent:
const string BATFILE = "Test.bat";
const bool HIDE = true;
static Encoding ENCODING = Encoding.Default;
static void Main(string[] args)
{
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd", BATFILE);
if (HIDE)
{
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
}
psi.RedirectStandardOutput = true;
psi.StandardOutputEncoding = ENCODING;
psi.UseShellExecute = false;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = psi;
p.OutputDataReceived += p_OutputDataReceived;
p.Start();
}
static void p_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
//Do something with a form...
System.Console.WriteLine(e.Data);
}
答案 1 :(得分:1)
我认为你也需要这个:
...
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
...
p.Start();
p.checkoutProcess.BeginOutputReadLine();
p.checkoutProcess.BeginErrorReadLine();