in nuget-extensions/shared/testSrc/ProcessExecutor.cs [11:57]
public static Result ExecuteProcess(string exe, params string[] args)
{
var pi = new ProcessStartInfo
{
FileName = exe,
Arguments = string.Join(" ", args.Select(x => x.Contains(' ') ? "\"" + x + "\"" : x)),
RedirectStandardError = true,
RedirectStandardOutput = true,
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = true,
};
Console.Out.WriteLine("Starting: " + pi.FileName + " " + pi.Arguments);
var process = new Process {StartInfo = pi};
var errorDataBuilder = new StringBuilder();
process.ErrorDataReceived += delegate(object sender, DataReceivedEventArgs e)
{
lock (errorDataBuilder)
{
errorDataBuilder.AppendLine(e.Data);
}
};
var outputDataBuilder = new StringBuilder();
process.OutputDataReceived += delegate(object sender, DataReceivedEventArgs e)
{
lock (outputDataBuilder)
{
outputDataBuilder.AppendLine(e.Data);
}
};
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
var exitCode = 1;
if (process.WaitForExit(60000))
{
exitCode = process.ExitCode;
}
return new Result(outputDataBuilder.ToString(), errorDataBuilder.ToString(), exitCode);
}