以C#格式运行.Bat

时间:2014-10-06 09:26:03

标签: c# winapi batch-file cmd

我的目标是从C#执行外部.bat文件。问题是我必须在我的表单中显示已执行的Bats的结果,而不是在控制台中。谷歌上的解决方案只向我展示如何启动蝙蝠,而不是如何从控制台获取内容。

实现这一目标的最佳方式是什么?

2 个答案:

答案 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();