你将如何在C#中的GUI窗体中执行批处理脚本
有谁能提供样品吗?
本示例假定Windows窗体应用程序具有两个文本框( RunResults
和Errors
)。
// 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
的按钮的按钮单击事件。 在窗体上有几个文本框, RunResults
和Errors
,我们将stdout
和stderr
的结果写入。
System.Diagnotics.Process.Start (“yourbatch.bat”); 应该这样做。
另一个线程覆盖相同的问题 。
我推断,通过在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 } }
取自这里的例子。