如何在 C# GUI 窗体中运行批处理文件

本文关键字:运行 批处理文件 窗体 GUI | 更新日期: 2023-09-27 17:56:32

如何在

C# 中的 GUI 表单中执行批处理脚本

任何人都可以提供样品吗?

如何在 C# GUI 窗体中运行批处理文件

System.Diagnotics.Process.Start("yourbatch.bat"); 应该这样做。

另一个涵盖同一问题的线程。

此示例假定一个具有两个文本框(RunResultsErrors)的 Windows 窗体应用程序。

// Remember to also add a using System.Diagnostics at the top of the class
private void RunIt_Click(object sender, EventArgs e)
{
    using (Process p = new Process())
    {
        p.StartInfo.WorkingDirectory = "<path to batch file folder>";
        p.StartInfo.FileName = "<path to batch file itself>";
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardError = true;
        p.Start();
        p.WaitForExit();
        // Capture output from batch file written to stdout and put in the 
        // RunResults textbox
        string output = p.StandardOutput.ReadToEnd();
        if (!String.IsNullOrEmpty(output) && output.Trim() != "")
        {
            this.RunResults.Text = output;
        }
        // Capture any errors written to stderr and put in the errors textbox.
        string errors = p.StandardError.ReadToEnd();
        if (!String.IsNullOrEmpty(errors) & errors.Trim() != ""))
        {
            this.Errors.Text = errors;
        }
    }
}

更新:

上面的示例是名为 RunIt 的按钮的按钮单击事件。表单、RunResultsErrors上有几个文本框,我们在其中写入stdoutstderr的结果。

我推断,在GUI表单中执行是指在某些UI控件中显示执行结果。

也许是这样的:

private void runSyncAndGetResults_Click(object sender, System.EventArgs e)     
{
    System.Diagnostics.ProcessStartInfo psi =
       new System.Diagnostics.ProcessStartInfo(@"C:'batch.bat");
    psi.RedirectStandardOutput = true;
    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    psi.UseShellExecute = false;
    System.Diagnostics.Process batchProcess;
    batchProcess = System.Diagnostics.Process.Start(psi);
    System.IO.StreamReader myOutput = batchProcess.StandardOutput;
    batchProcess.WaitForExit(2000);
    if (batchProcess.HasExited)
    {
        string output = myOutput.ReadToEnd();
        // Print 'output' string to UI-control
    }
}

示例取自此处。