以C#形式运行.Bat
我的目标是从C#执行一个外部.bat文件。问题是我必须以我的形式显示执行的BAT的结果,而不是在控制台中。google上的解决方案只向我展示了如何启动bat,而不是如何从控制台获取内容以C#形式运行.Bat,c#,winapi,batch-file,cmd,C#,Winapi,Batch File,Cmd,我的目标是从C#执行一个外部.bat文件。问题是我必须以我的形式显示执行的BAT的结果,而不是在控制台中。google上的解决方案只向我展示了如何启动bat,而不是如何从控制台获取内容 实现这一点的最佳方法是什么?您可以在Process类中使用StandartOutputEvent: const string BATFILE = "Test.bat"; const bool HIDE = true; static Encoding ENCODING = Encoding.
实现这一点的最佳方法是什么?您可以在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);
}
我想你也需要这个:
...
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
...
p.Start();
p.checkoutProcess.BeginOutputReadLine();
p.checkoutProcess.BeginErrorReadLine();
检查此选项没有帮助,我希望整个过程都有输出,而不仅仅是在完成后。它必须在bat生成的每一行上进行更新。您可以使用proc.StandardOutput.ReadLine()而不是proc.StandardOutput.ReadToEnd()来读取每一行的输出,这应该会有所帮助。我会尝试一下,如果成功的话会给出回复。为什么要在表单上显示文本输出?它不是为此而设计的。改用控制台窗口。