using System; using System.Diagnostics; using System.IO; namespace linker.libs { public sealed class CommandHelper { public static string Windows(string arg, string[] commands) { return Execute("cmd.exe", arg, commands,out string error); } public static string PowerShell(string arg, string[] commands, out string error) { error = string.Empty; if (IsPowerShellInstalled() == false) { error = "PowerShell is not installed"; return string.Empty; } return Execute("powershell.exe", arg, commands,out error); } public static string Linux(string arg, string[] commands) { return Execute("/bin/bash", arg, commands, out string error); } public static string Osx(string arg, string[] commands) { return Execute("/bin/bash", arg, commands, out string error); } public static Process Execute(string fileName, string arg) { Process proc = new Process(); proc.StartInfo.CreateNoWindow = true; proc.StartInfo.FileName = fileName; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.Arguments = arg; proc.StartInfo.Verb = "runas"; proc.Start(); //Process proc = Process.Start(fileName, arg); return proc; } public static string Execute(string fileName, string arg, string[] commands,out string error) { using Process proc = new Process(); proc.StartInfo.WorkingDirectory = Path.GetFullPath(Path.Join("./")); proc.StartInfo.CreateNoWindow = true; proc.StartInfo.FileName = fileName; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.Arguments = arg; proc.StartInfo.Verb = "runas"; proc.Start(); if (commands.Length > 0) { for (int i = 0; i < commands.Length; i++) { proc.StandardInput.WriteLine(commands[i]); } } proc.StandardInput.AutoFlush = true; proc.StandardInput.WriteLine("exit"); proc.StandardInput.Close(); error = proc.StandardError.ReadToEnd(); string output = string.Empty; if (string.IsNullOrWhiteSpace(error)) { output = proc.StandardOutput.ReadToEnd(); } proc.WaitForExit(); proc.Close(); proc.Dispose(); return output; } public static bool IsPowerShellInstalled() { string[] powerShellPaths = { Environment.ExpandEnvironmentVariables(@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"), Environment.ExpandEnvironmentVariables(@"%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe") }; foreach (string path in powerShellPaths) { if (File.Exists(path)) { return true; } } return false; } } }