private void ExecuteProcess(string cmd, string args, Action <string, CommandOutput> handleOutput) { var command = new CommandOutput { Executable = cmd, Arguments = args, Lines = new List <string>(), Raw = new List <string>() }; var info = new ProcessStartInfo { WorkingDirectory = Directory.GetCurrentDirectory(), FileName = cmd, Arguments = args, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true }; using (var process = new Process { StartInfo = info }) { try { process.Start(); } catch (Exception ex) { throw new BuildException( string.Format("Error launching process: {0} {1}", cmd, args)); } var handleProcessOutput = new Action <string>(text => { lock (this) { handleOutput(text, command); } }); var io = new ProcessIoManager(process); io.StdoutTextRead += new StringReadEventHandler(handleProcessOutput); io.StderrTextRead += new StringReadEventHandler(handleProcessOutput); io.StartProcessOutputRead(); process.WaitForExit(); Thread.Sleep(100); process.Close(); io.StopMonitoringProcessOutput(); } Outputs.Add(command); }
private void ExecuteProcess(string cmd, string args, Action<string, CommandOutput> handleOutput) { var command = new CommandOutput { Executable = cmd, Arguments = args, Lines = new List<string>(), Raw = new List<string>() }; var info = new ProcessStartInfo { WorkingDirectory = Directory.GetCurrentDirectory(), FileName = cmd, Arguments = args, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true }; using (var process = new Process { StartInfo = info }) { try { process.Start(); } catch (Exception ex) { throw new BuildException( string.Format("Error launching process: {0} {1}", cmd, args)); } var handleProcessOutput = new Action<string>(text => { lock (this) { handleOutput(text, command); } }); var io = new ProcessIoManager(process); io.StdoutTextRead += new StringReadEventHandler(handleProcessOutput); io.StderrTextRead += new StringReadEventHandler(handleProcessOutput); io.StartProcessOutputRead(); process.WaitForExit(); Thread.Sleep(100); process.Close(); io.StopMonitoringProcessOutput(); } Outputs.Add(command); }