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