43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
using System.Diagnostics;
 | 
						|
using System.Text;
 | 
						|
 | 
						|
public static class ProcessExtensions
 | 
						|
{
 | 
						|
  // Execute an application or binary with given arguments
 | 
						|
  //
 | 
						|
  // See: https://stackoverflow.com/questions/4291912/process-start-how-to-get-the-output
 | 
						|
  public static int Run(this Process process, string application,
 | 
						|
    string arguments, string workingDirectory, out string output,
 | 
						|
    out string errors)
 | 
						|
  {
 | 
						|
    // Configure how to run the application
 | 
						|
    process.StartInfo = new ProcessStartInfo {
 | 
						|
      CreateNoWindow = true,
 | 
						|
      UseShellExecute = false,
 | 
						|
      RedirectStandardError = true,
 | 
						|
      RedirectStandardOutput = true,
 | 
						|
      FileName = application,
 | 
						|
      Arguments = arguments,
 | 
						|
      WorkingDirectory = workingDirectory
 | 
						|
    };
 | 
						|
 | 
						|
    // Read the output
 | 
						|
    var outputBuilder = new StringBuilder();
 | 
						|
    var errorsBuilder = new StringBuilder();
 | 
						|
    process.OutputDataReceived += (_, args) => outputBuilder.AppendLine(args.Data);
 | 
						|
    process.ErrorDataReceived += (_, args) => errorsBuilder.AppendLine(args.Data);
 | 
						|
 | 
						|
    // Run the application and wait for it to complete
 | 
						|
    process.Start();
 | 
						|
    process.BeginOutputReadLine();
 | 
						|
    process.BeginErrorReadLine();
 | 
						|
    process.WaitForExit();
 | 
						|
 | 
						|
    // Format the output
 | 
						|
    output = outputBuilder.ToString().TrimEnd();
 | 
						|
    errors = errorsBuilder.ToString().TrimEnd();
 | 
						|
 | 
						|
    return process.ExitCode;
 | 
						|
  }
 | 
						|
}
 |