using System.ComponentModel.DataAnnotations; using System.Diagnostics; using Newtonsoft.Json; /// /// A command specification (a system command), /// in order to reference some trusted server-side process /// public class Command { [Required] [JsonPropertyAttribute("path")] public string Path { get; set; } [JsonPropertyAttribute("args")] public string[] Args { get; set; } /// /// Specific variables for this process /// /// [JsonPropertyAttribute("env")] public string[] Environment { get; set; } public virtual Process Start(string workingDir=null, bool redirectInput=false, bool redirectOutput=false) { var procStart = new ProcessStartInfo(Path, string.Join(" ",Args)); procStart.WorkingDirectory = workingDir; procStart.UseShellExecute = false; procStart.RedirectStandardInput = true; procStart.RedirectStandardOutput = true; procStart.RedirectStandardError = false; return Process.Start(procStart); } }