public static ExecuteResult Execute(string aUserName, System.Security.SecureString aCheck, string aExe, string aArgs, System.Diagnostics.ProcessPriorityClass aPriority, string aStdin, ExecOutputDelegate aOutput, ExecOutputDelegate aError) { string Domain = string.Empty; string User = ParseUserName(aUserName, out Domain); bool HasStdin = !string.IsNullOrEmpty(aStdin); ExecuteResult Result = null; try { using (System.Diagnostics.Process P = new System.Diagnostics.Process()) { P.StartInfo = new System.Diagnostics.ProcessStartInfo(aExe, aArgs) { UseShellExecute = false, RedirectStandardInput = HasStdin, RedirectStandardError = true, RedirectStandardOutput = true, CreateNoWindow = true, UserName = User, Domain = Domain, Password = aCheck, LoadUserProfile = true, }; // These will read while the process is running. StdHandler Out = new StdHandler(OutputSource.stdout, P, aOutput); StdHandler Err = new StdHandler(OutputSource.stderr, P, aError); // Go P.Start(); // Start the handlers Out.Start(); Err.Start(); // Send any imput to the process if (HasStdin) { P.StandardInput.WriteLine(aStdin); P.StandardInput.Flush(); } // Gotta set priority AFTER start P.PriorityClass = aPriority; // And wait till it is done (timeout?) P.WaitForExit(); // And done, build a result thingy Result = new ExecuteResult(P, Out, Err); } } catch (Exception Ex) { Debug.Write("Execute (" + aExe + "): "); Debug.WriteLine(Ex); Result = new ExecuteResult(Ex); } return Result; }
public static ExecuteResult Execute(string aUserName, System.Security.SecureString aCheck, string aExe, string aArgs, string aStdin, ExecOutputDelegate aOutputAndError) { return Execute(aUserName, aCheck, aExe, aArgs, System.Diagnostics.ProcessPriorityClass.Normal, aStdin, aOutputAndError, aOutputAndError); }
public StdHandler(OutputSource aSource, System.Diagnostics.Process aProcess, ExecOutputDelegate aOutput) { itsProcess = aProcess; Source = aSource; Output = aOutput; if (Source == OutputSource.stderr) aProcess.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(OutputDataReceived); else aProcess.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(OutputDataReceived); }