public static Result ExecuteProcess()

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