C#调用cmd执行命令获取返回结果

来源:互联网 发布:e商盟软件 编辑:程序博客网 时间:2024/06/07 10:16

最近在开发一个编译工具,调用GCC工具链和Makefile来实现编译整个工程,遇到了一个小问题,在此记录下。

具体代码如下:

        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 ");

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 龙虾市场价多少钱一斤 青龙虾图片 文和友老长沙龙虾馆 创造与魔法小龙虾在哪里钓 龙蛇演义 笔走龙蛇 龙蛇枝作品 龙蛇演义txt 龙蛇图片 龙蛇照片 聊斋龙蛇 异世龙蛇 龙蛇的图片 龙蛇演义2 龙蛇争霸 龙蛇演义1 龙蛇枝 龙蛇不辨 不辨龙蛇 龙蛇再起 龙蛇相配吗 龙蛇客栈 龙蛇羊泉汤 龙蛇配吗 龙蛇果 龙蛇兰 龙蛇之战 龙蛇成语 龙蛇之蛰 龙蛇草 树下龙蛇桃运小村医 洪荒龙蛇进化开始 洪荒从龙蛇进化开始 无限从龙蛇开始 龙蛇演义txt下载 诸天之龙蛇国术 树下龙蛇黄羿 聊斋之龙蛇起舞 龙蛇演义之唐紫尘失贞 龙蛇演义2拳震山河 龙蛇侠影