c# 调用CMD窗口执行命令
1.c# 调用CMD窗体执行命令 阻塞执行, 并在最后执行完后一次性输出执行结果
public static string RunCmd(string cmd) { //string strInput = Console.ReadLine(); Process p = new Process(); //设置要启动的应用程序 p.StartInfo.FileName = "cmd.exe"; //是否使用操作系统shell启动 p.StartInfo.UseShellExecute = false; // 接受来自调用程序的输入信息 p.StartInfo.RedirectStandardInput = true; //输出信息 p.StartInfo.RedirectStandardOutput = true; // 输出错误 p.StartInfo.RedirectStandardError = true; //不显示程序窗口 p.StartInfo.CreateNoWindow = true; p.StartInfo.WindowStyle = ProcessWindowStyle.Normal; //启动程序 p.Start(); //向cmd窗口发送输入信息 p.StandardInput.WriteLine(cmd + "&exit"); p.StandardInput.AutoFlush = true; //获取输出信息 string strOuput = p.StandardOutput.ReadToEnd(); //等待程序执行完退出进程 p.WaitForExit(); p.Close(); return strOuput; //Console.WriteLine(strOuput); }
2. 调用CMD窗体执行命令 实时获取执行结果并输出
public string RunCmd(string cmd) { try { //string strInput = Console.ReadLine(); Process p = new Process(); //设置要启动的应用程序 p.StartInfo.FileName = "cmd.exe"; //是否使用操作系统shell启动 p.StartInfo.UseShellExecute = false; // 接受来自调用程序的输入信息 p.StartInfo.RedirectStandardInput = true; //输出信息 p.StartInfo.RedirectStandardOutput = true; // 输出错误 p.StartInfo.RedirectStandardError = true; //不显示程序窗口 p.StartInfo.CreateNoWindow = true; p.StartInfo.WindowStyle = ProcessWindowStyle.Normal; p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived); //启用Exited事件 p.EnableRaisingEvents = true; p.Exited += new EventHandler(Process_Exited); //启动程序 p.Start(); p.BeginOutputReadLine(); p.BeginErrorReadLine(); p.StandardInput.AutoFlush = true; //输入命令 p.StandardInput.WriteLine(cmd); p.StandardInput.WriteLine("exit"); //获取输出信息 // string strOuput = p.StandardOutput.ReadToEnd(); //等待程序执行完退出进程 //p.WaitForExit(); //p.Close(); // return strOuput; return string.Empty; } catch (Exception ex) { throw ex; } } private void p_OutputDataReceived(object sender, DataReceivedEventArgs e) { if (e.Data != null) { Console.WriteLine(e.Data); } } private void p_ErrorDataReceived(object sender, DataReceivedEventArgs e) { if (e.Data != null) { Console.WriteLine(e.Data); } } private void Process_Exited(object sender, EventArgs e) {
Console.WriteLine("命令执行完毕");
}