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;
							 | 
						|||
| 
								 | 
							
								  }
							 | 
						|||
| 
								 | 
							
								}
							 |