C#调用cmd执行命令获取返回结果
2017-12-24 19:37
776 查看
最近在开发一个编译工具,调用GCC工具链和Makefile来实现编译整个工程,遇到了一个小问题,在此记录下。
具体代码如下:
通过以上代码,可以完美实现在编译的过程中,updatelog实时显示编译的信息到文本框中,但是,有个不足之处在于,编译过程中的警告或出错信息并不会显示到上面来,这样,我们就不知道代码的编译究竟有没有问题了,怎么办才好了呢?
通过了解cmd重定向这方面,得知我们当前重定向得到的是标准输出,而警告和错误信息并不属于标准输出,所以我们在上面的代码中,可以看到在调试输出窗口可以显示警告或错误信息,而在我们的文本框中却没法显示,解决方法就是,将标准错误重定向为标准输出就可以了,具体为将上面的第27行的代码改为
具体代码如下:
public String shell = "";
public bool sendCmd(MainForm cmdoom) { Process cmd = null; if (cmd == null) { cmd = new Process();//创建进程对象 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "cmd.exe";//设定需要执行的命令 startInfo.Arguments = "";//“/C”表示执行完命令后马上退出 startInfo.UseShellExecute = false;//不使用系统外壳程序启动 startInfo.RedirectStandardInput = true;//不重定向输入 startInfo.RedirectStandardOutput = true; //重定向输出 startInfo.CreateNoWindow = true;//不创建窗口 cmd.StartInfo = startInfo; } try { if (cmd.Start())//开始进程 { cmd.StandardOutput.ReadLine().Trim(); cmd.StandardOutput.ReadLine().Trim(); while (cmdoom.isRun.IndexOf("start") != -1) { if (shell.Length > 0) { cmd.StandardInput.WriteLine(shell); cmd.StandardOutput.ReadLine().Trim(); cmd.StandardInput.WriteLine("\n"); String log = cmd.StandardOutput.ReadLine().Trim(); log = log.Substring(log.IndexOf("make"), log.Length - (log.IndexOf("make")+5)); String path = log.Substring(0, 2).ToUpper(); updateLog(cmdoom, log + "\n"); log = ""; do { String logm = cmd.StandardOutput.ReadLine().Trim(); if (logm.Trim() == "") { updateLog(cmdoom, ""); break; } updateLog(cmdoom, logm + "\n"); log += logm; } while (true); shell = ""; } } cmd.Close(); cmd = null; return true; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("cmd" + ex.ToString()); } return true; }
通过以上代码,可以完美实现在编译的过程中,updatelog实时显示编译的信息到文本框中,但是,有个不足之处在于,编译过程中的警告或出错信息并不会显示到上面来,这样,我们就不知道代码的编译究竟有没有问题了,怎么办才好了呢?
通过了解cmd重定向这方面,得知我们当前重定向得到的是标准输出,而警告和错误信息并不属于标准输出,所以我们在上面的代码中,可以看到在调试输出窗口可以显示警告或错误信息,而在我们的文本框中却没法显示,解决方法就是,将标准错误重定向为标准输出就可以了,具体为将上面的第27行的代码改为
cmd.StandardInput.WriteLine(shell + " 2>&1 ");
相关文章推荐
- C#调用cmd执行命令获取返回值
- c#.NET 调用命令控制台 并获取执行结果
- 开篇第一篇文章:启动Cmd执行指定的命令并返回执行的结果
- C#程序调用cmd.exe执行命令
- java调用shell命令并获取执行结果
- c#关闭系统进程以及如何调用cmd并执行命令
- java调用shell命令并获取执行结果
- C#程序调用cmd执行命令
- C#程序中调用cmd执行命令
- C#通过获取CMD里ipconfig命令的结果来得到IP
- C#程序调用cmd执行命令(转)
- Linux中用C语言执行shell命令并获取返回结果
- C#程序调用cmd执行命令
- c#关闭系统进程以及如何调用cmd并执行命令
- Delphi下调用CMD命令并获取结果
- java 中调用window系统中的文件,或者执行命令(shell、.CMD、.EXE)并获取返回值
- c#中调用cmd命令执行批处理文件
- VB.net中执行外部CMD命令并获取返回字符串
- Qt如何执行bash命令,并获取返回结果
- Linux C 执行shell命令并获取返回结果