public static AsyncProcess Start(ProcessStartInfo startInfo, IDictionary environment) { startInfo.RedirectStandardError = true; startInfo.RedirectStandardOutput = true; startInfo.UseShellExecute = false; if (environment != null) { foreach (var i in environment.Keys) { startInfo.EnvironmentVariables[(string)i] = (string)environment[i]; } } var result = new AsyncProcess(new Process { StartInfo = startInfo }); result._process.EnableRaisingEvents = true; // set up std* access result._process.ErrorDataReceived += (sender, args) => { result._stdError.Add(args.Data ?? string.Empty); }; result._process.OutputDataReceived += (sender, args) => { result._stdOut.Add(args.Data ?? string.Empty); }; result._process.Exited += (sender, args) => { result.WaitForExit(); result._stdError.Completed(); result._stdOut.Completed(); }; result._process.Start(); result._process.BeginErrorReadLine(); result._process.BeginOutputReadLine(); return(result); }
public static AsyncProcess Start(ProcessStartInfo startInfo, IDictionary environment) { startInfo.RedirectStandardError = true; startInfo.RedirectStandardOutput = true; startInfo.UseShellExecute = false; if (environment != null) { foreach (var i in environment.Keys) { startInfo.EnvironmentVariables[(string)i] = (string)environment[i]; } } var result = new AsyncProcess(new Process { StartInfo = startInfo }); result._process.EnableRaisingEvents = true; // set up std* access result._process.ErrorDataReceived += (sender, args) => { result._stdError.Add(args.Data ?? string.Empty); }; result._process.OutputDataReceived += (sender, args) => { result._stdOut.Add(args.Data ?? string.Empty); }; result._process.Exited +=(sender, args) => { result.WaitForExit(); result._stdError.Completed(); result._stdOut.Completed(); }; result._process.Start(); result._process.BeginErrorReadLine(); result._process.BeginOutputReadLine(); return result; }