using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HttpClientStudy.Core.Utilities { /// /// dotnet命令行工具类 /// public static class DotnetCommondUtility { /// /// 执行dotnet命令 /// /// 命令 /// 命令参数 /// 是否等待退出 /// 命令行输出文本 public static string ExecuteCommand(string command, string arguments = "", bool waitForExit=false) { string output = ""; try { ProcessStartInfo startInfo = new ProcessStartInfo() { FileName = "dotnet", Arguments = $"{command} {arguments}", RedirectStandardOutput = true, //StandardOutputEncoding = Encoding.UTF8, RedirectStandardError = true, //StandardErrorEncoding = Encoding.UTF8, RedirectStandardInput = false, //StandardInputEncoding = Encoding.UTF8, UseShellExecute = false, CreateNoWindow = false, }; Process process = new Process() { StartInfo = startInfo, }; process.Start(); if (startInfo.RedirectStandardInput) { process.StandardInput.Write(""); } output = process.StandardOutput.ReadToEnd(); if (waitForExit) { process.WaitForExit(); } } catch (Exception ex) { output = $"An error occurred: {ex.Message}"; } return output; } /// /// 新窗口启动WebApp项目 /// /// 包含全路径的WebApp项目 /// public static string RunWebApp(string startFile) { string output = ""; try { ProcessStartInfo startInfo = new ProcessStartInfo() { FileName = "powershell.exe", Arguments = $"Start-Process -FilePath '{startFile}'", UseShellExecute = false, CreateNoWindow = false, }; Process process = new Process() { StartInfo = startInfo, }; process.Start(); output = "新窗口启动WebApp项目,已有实例在运行则窗口会自动关闭"; } catch (Exception ex) { output = $"An error occurred: {ex.Message}"; } return output; } /// /// 启动新窗口,执行指定文件 /// /// 包含全路径的可执行文件 /// public static string SopWebApp() { string output = ""; try { string projectAndMutexName = WebApiConfigManager.GetWebApiConfigOption().CurrentValue.WebAppMutexName; ProcessStartInfo startInfo = new ProcessStartInfo() { FileName = "powershell.exe", Arguments = $"Stop-Process -Name '{projectAndMutexName}'", UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, StandardOutputEncoding = Encoding.UTF8, }; Process process = new Process() { StartInfo = startInfo, }; process.Start(); process.WaitForExit(); output = process.StandardOutput.ReadToEnd(); } catch (Exception ex) { output = $"An error occurred: {ex.Message}"; } return output; } } }