// @environmentOverride overrides even the global override values public static ProcessWrapper StartProcess(ProcessStartInfo startInfo, ProcessEventHandler outputStreamChanged, ProcessEventHandler errorStreamChanged, EventHandler exited, StringDictionary environmentOverride) { if (startInfo == null) { throw new ArgumentException("startInfo"); } ProcessWrapper p = new ProcessWrapper(); if (outputStreamChanged != null) { p.OutputStreamChanged += outputStreamChanged; } if (errorStreamChanged != null) { p.ErrorStreamChanged += errorStreamChanged; } if (exited != null) { p.Exited += exited; } p.StartInfo = startInfo; ProcessEnvironmentVariableOverrides(p.StartInfo, environmentOverride); // WORKAROUND for "Bug 410743 - wapi leak in System.Diagnostic.Process" // Process leaks when an exit event is registered // instead we use another thread to monitor I/O and wait for exit // p.EnableRaisingEvents = true; p.Start(); return(p); }
// @environmentOverride overrides even the global override values public static ProcessWrapper StartProcess (ProcessStartInfo startInfo, ProcessEventHandler outputStreamChanged, ProcessEventHandler errorStreamChanged, EventHandler exited, StringDictionary environmentOverride) { if (startInfo == null) throw new ArgumentException ("startInfo"); ProcessWrapper p = new ProcessWrapper(); if (outputStreamChanged != null) { p.OutputStreamChanged += outputStreamChanged; } if (errorStreamChanged != null) p.ErrorStreamChanged += errorStreamChanged; if (exited != null) p.Exited += exited; p.StartInfo = startInfo; ProcessEnvironmentVariableOverrides (p.StartInfo, environmentOverride); // WORKAROUND for "Bug 410743 - wapi leak in System.Diagnostic.Process" // Process leaks when an exit event is registered // instead we use another thread to monitor I/O and wait for exit // p.EnableRaisingEvents = true; p.Start (); return p; }