using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System; using System.Diagnostics; using System.Runtime.InteropServices; namespace AyaNova.Util { public static class RunProgram { public static string Run(string cmd, string arguments) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { return RunWindows(cmd, arguments); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { return RunOSX(cmd, arguments); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { return RunLinuxBash(cmd, arguments); } else { throw new PlatformNotSupportedException(); } } // using (var process = new Process()) // { // process.StartInfo.FileName = @"..\HelloWorld\bin\Debug\helloworld.exe"; // relative path. absolute path works too. // process.StartInfo.Arguments = $"{id}"; // //process.StartInfo.FileName = @"cmd.exe"; // //process.StartInfo.Arguments = @"/c dir"; // print the current working directory information // process.StartInfo.CreateNoWindow = true; // process.StartInfo.UseShellExecute = false; // process.StartInfo.RedirectStandardOutput = true; // process.StartInfo.RedirectStandardError = true; // process.OutputDataReceived += (sender, data) => Console.WriteLine(data.Data); // process.ErrorDataReceived += (sender, data) => Console.WriteLine(data.Data); // Console.WriteLine("starting"); // process.Start(); // process.BeginOutputReadLine(); // process.BeginErrorReadLine(); // var exited = process.WaitForExit(1000 * 10); // (optional) wait up to 10 seconds // Console.WriteLine($"exit {exited}"); // } public static string RunWindows(string cmd, string arguments) { using (var process = new Process()) { process.StartInfo = new ProcessStartInfo { FileName = cmd, Arguments = arguments, RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, }; process.Start(); string result = process.StandardOutput.ReadToEnd(); process.WaitForExit(); return result; } } public static string RunLinuxBash(string cmd, string arguments) { var escapedArgs = $"{cmd} {arguments}".Replace("\"", "\\\""); using (var process = new Process()) { process.StartInfo = new ProcessStartInfo { FileName = "/bin/bash", Arguments = $"-c \"{escapedArgs}\"", RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, }; process.Start(); string result = process.StandardOutput.ReadToEnd(); process.WaitForExit(); return result; } } public static string RunOSX(string cmd, string arguments) { using (var process = new Process()) { process.StartInfo = new ProcessStartInfo { FileName = cmd, Arguments = arguments, RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, }; process.Start(); string result = process.StandardOutput.ReadToEnd(); process.WaitForExit(); return result; } } } }