如何從C#執行命令行程序並獲取STD OUT結果? 具體來講,我想在以編程方式選擇的兩個文件上執行DIFF,並將結果寫入文本框。 編程
// usage const string ToolFileName = "example.exe"; string output = RunExternalExe(ToolFileName); public string RunExternalExe(string filename, string arguments = null) { var process = new Process(); process.StartInfo.FileName = filename; if (!string.IsNullOrEmpty(arguments)) { process.StartInfo.Arguments = arguments; } process.StartInfo.CreateNoWindow = true; process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardError = true; process.StartInfo.RedirectStandardOutput = true; var stdOutput = new StringBuilder(); process.OutputDataReceived += (sender, args) => stdOutput.AppendLine(args.Data); // Use AppendLine rather than Append since args.Data is one line of output, not including the newline character. string stdError = null; try { process.Start(); process.BeginOutputReadLine(); stdError = process.StandardError.ReadToEnd(); process.WaitForExit(); } catch (Exception e) { throw new Exception("OS error while executing " + Format(filename, arguments)+ ": " + e.Message, e); } if (process.ExitCode == 0) { return stdOutput.ToString(); } else { var message = new StringBuilder(); if (!string.IsNullOrEmpty(stdError)) { message.AppendLine(stdError); } if (stdOutput.Length != 0) { message.AppendLine("Std output:"); message.AppendLine(stdOutput.ToString()); } throw new Exception(Format(filename, arguments) + " finished with exit code = " + process.ExitCode + ": " + message); } } private string Format(string filename, string arguments) { return "'" + filename + ((string.IsNullOrEmpty(arguments)) ? string.Empty : " " + arguments) + "'"; }
PublicDomain開源代碼中有一個ProcessHelper類,您可能對此感興趣。 ui
我發現還有另外一個有用的參數,能夠用來消除過程窗口 spa
pProcess.StartInfo.CreateNoWindow = true;
若是您要這樣作,這有助於徹底向用戶隱藏黑色控制檯窗口。 命令行
這可能不是最好/最簡單的方法,可是能夠選擇: code
從代碼執行時,添加「> output.txt」,而後讀入output.txt文件。 orm
// Start the child process. Process p = new Process(); // Redirect the output stream of the child process. p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.FileName = "YOURBATCHFILE.bat"; p.Start(); // Do not wait for the child process to exit before // reading to the end of its redirected stream. // p.WaitForExit(); // Read the output stream first and then wait. string output = p.StandardOutput.ReadToEnd(); p.WaitForExit();
代碼來自MSDN 。 get