using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; namespace Tiobon.Core.OPS.Tool.OPS.Tool.Helper { public class CmdHelper { private static string CmdPath = @"C:\Windows\System32\cmd.exe"; /// /// 执行cmd命令 /// 多命令请使用批处理命令连接符: /// /// 其他请百度 /// /// /// public static void RunCmd(string cmd, out string output) { cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态 using (Process p = new Process()) { p.StartInfo.FileName = CmdPath; p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动 p.StartInfo.RedirectStandardInput = true; //接受来自调用程序的输入信息 p.StartInfo.RedirectStandardOutput = true; //由调用程序获取输出信息 p.StartInfo.RedirectStandardError = true; //重定向标准错误输出 p.StartInfo.CreateNoWindow = true; //不显示程序窗口 //p.StartInfo.Arguments = "/C netsh advfirewall firewall add rule name=\"allow 24897\" protocol=TCP dir=in localport=24897 action=allow&exit"; p.StartInfo.Verb = "runas"; p.Start();//启动程序 //向cmd窗口写入命令 p.StandardInput.AutoFlush = true; p.StandardInput.WriteLine(cmd); //获取cmd窗口的输出信息 output = p.StandardOutput.ReadToEnd(); p.WaitForExit();//等待程序执行完退出进程 p.Close(); } Const.write_log($"{cmd}\r\n\t{output}"); } } }