public Exec( ProcessArguments arguments, ExecFlags flags = None, ConsoleRedirection outputRedirection = null, Action <StreamWriter> inputHandler = null, string workingDirectory = null, IReadOnlyDictionary <string, string> environmentVariables = null) { Arguments = arguments; if (Arguments.Count < 1) { throw new ArgumentOutOfRangeException( nameof(arguments), "must have at least one argument (the file name to execute)"); } Flags = flags; InputHandler = inputHandler; OutputRedirection = outputRedirection; if (Flags.HasFlag(RedirectStdin) && InputHandler == null) { throw new ArgumentException( $"{nameof (RedirectStdin)} was specified " + $"but {nameof (InputHandler)} is null", nameof(flags)); } if (Flags.HasFlag(RedirectStdout) && OutputRedirection == null) { throw new ArgumentException( $"{nameof (RedirectStdout)} was specified " + $"but {nameof (OutputRedirection)} is null", nameof(flags)); } if (Flags.HasFlag(RedirectStderr) && OutputRedirection == null) { throw new ArgumentException( $"{nameof (RedirectStderr)} was specified " + $"but {nameof (OutputRedirection)} is null", nameof(flags)); } WorkingDirectory = workingDirectory; EnvironmentVariables = environmentVariables ?? new Dictionary <string, string> (); id = lastId++; }
public Exec( ProcessArguments arguments, ExecFlags flags = None, ConsoleRedirection outputRedirection = null, Action <StreamWriter> inputHandler = null, string workingDirectory = null, ProcessRunnerHandler processRunner = null) { Arguments = arguments; if (Arguments.Count < 1) { throw new ArgumentOutOfRangeException( nameof(arguments), "must have at least one argument (the file name to execute)"); } Id = lastId++; Flags = flags; Elevated = flags.HasFlag(Elevate); InputHandler = inputHandler; OutputRedirection = outputRedirection; if (isWindows) { // Ignore elevation flag if we are already running in the Administrator role var identity = WindowsIdentity.GetCurrent(); if (identity != null && new WindowsPrincipal(identity).IsInRole(WindowsBuiltInRole.Administrator)) { Elevated = false; } } else { if (Path.GetExtension(arguments [0]) == ".exe") { Arguments = Arguments.Insert(0, "mono"); } if (Elevated) { if (geteuid() == 0) { Elevated = false; } else { Arguments = Arguments.Insert(0, "/usr/bin/sudo"); } } } if (Flags.HasFlag(RedirectStdin) && InputHandler == null) { throw new ArgumentException( $"{nameof (RedirectStdin)} was specified " + $"but {nameof (InputHandler)} is null", nameof(flags)); } if (Flags.HasFlag(RedirectStdout) && OutputRedirection == null) { throw new ArgumentException( $"{nameof (RedirectStdout)} was specified " + $"but {nameof (OutputRedirection)} is null", nameof(flags)); } if (Flags.HasFlag(RedirectStderr) && OutputRedirection == null) { throw new ArgumentException( $"{nameof (RedirectStderr)} was specified " + $"but {nameof (OutputRedirection)} is null", nameof(flags)); } WorkingDirectory = workingDirectory; ProcessRunner = processRunner ?? GlobalProcessRunner ?? DefaultProcessRunner; }