当前位置:编程学习 > C#/ASP.NET >>

运行DOS程序的问题

代码如下:
        Process pCmd = new Process();
        pCmd.StartInfo.FileName = "cmd.exe";

        pCmd.StartInfo.UseShellExecute = false;
        pCmd.StartInfo.RedirectStandardInput = true;
        pCmd.StartInfo.RedirectStandardOutput = true;
        pCmd.StartInfo.RedirectStandardError = true;
        pCmd.StartInfo.CreateNoWindow = true;
        pCmd.Start();

        pCmd.StandardInput.WriteLine("DOS程序");
        StreamReader srTemp = pCmd.StandardOutput;
        StringBuilder sbTemp = new StringBuilder();
        while (true)
        {
          sbTemp.Remove(0, sbTemp.Length);
          sbTemp.Append(srTemp.ReadLine());
          richTextBox1.AppendText(sbTemp.ToString() + "\n");
          this.Refresh();
        }


问题是DOS程序运行结果并未返回。如将pCmd.StartInfo.CreateNoWindow属性改为false,则出现DOS窗口,按任意键后DOS程序运行,并有结果返回。

不知是何原因?如何不显示DOS窗口有能返回运行结果?


--------------------编程问答-------------------- 我试过了,这样没问题啊
            ProcessStartInfo si = new ProcessStartInfo("ping", "www.163.com");
            si.CreateNoWindow = true;
            si.RedirectStandardOutput = true;
            si.UseShellExecute = false;
            Process p = Process.Start(si);
            textBox1.Text = p.StandardOutput.ReadToEnd();
--------------------编程问答-------------------- 可以直接给dos命令加输出定向符 >> 输出到制定的文本文件中。
如:dir > a.txt --------------------编程问答-------------------- 原DOS程序执行后会要求键盘输入,但现在连在要求输入前的任何信息都读不到
--------------------编程问答-------------------- 或者问题应该表述为:如何在C#中执行DOS批处理文件,并能重定位输入、输出。 --------------------编程问答--------------------
引用 3 楼 xiaollx 的回复:
原DOS程序执行后会要求键盘输入,但现在连在要求输入前的任何信息都读不到 

这个说明你程序肯定有问题,自己漫漫检查把,
--------------------编程问答--------------------
引用 1 楼 lake_cx 的回复:
我试过了,这样没问题啊 

C# code            ProcessStartInfo si = new ProcessStartInfo("ping", "www.163.com");
            si.CreateNoWindow = true;
            si.RedirectStandardOutput = true;
            si.UseShellExecute = false;
            Process p = Process.Start(si);
            textBox1.Text = p.StandardOutput.ReadToEnd();


感觉好像与命令是内部或外部命令有关.

因为前时间想获取net use命令的结果也没有成功,但是ping命令却可以.期待此贴有解,从中学习. --------------------编程问答-------------------- protected static void RunDosFun()
        {
            Process pCmd = new Process();
            pCmd.StartInfo.FileName = "cmd.exe";

            pCmd.StartInfo.UseShellExecute = false;
            pCmd.StartInfo.RedirectStandardInput = true;
            pCmd.StartInfo.RedirectStandardOutput = true;
            pCmd.StartInfo.RedirectStandardError = true;
            pCmd.StartInfo.CreateNoWindow = true;
            pCmd.Start();

            pCmd.StandardInput.WriteLine("DOS程序");
            StreamReader srTemp = pCmd.StandardOutput;
            StringBuilder sbTemp = new StringBuilder();
            while (srTemp.ReadLine()!= null)
            {
                sbTemp.Remove(0, sbTemp.Length);
                sbTemp.Append(srTemp.ReadLine());
                Console.WriteLine(sbTemp.ToString()); //Add output to console
            } 
        }

protected static void GetPingInfo()
        {
            ProcessStartInfo si = new ProcessStartInfo("ping", "www.163.com");
            si.CreateNoWindow = true;
            si.RedirectStandardOutput = true;
            si.UseShellExecute = false;
            Process p = Process.Start(si);
            string str = p.StandardOutput.ReadToEnd();
            Console.Write(str); //Add output to console

        } --------------------编程问答-------------------- 要输入的也没问题啊
            ProcessStartInfo si = new ProcessStartInfo("netsh");
            si.CreateNoWindow = true;
            si.RedirectStandardInput = true;
            si.RedirectStandardOutput = true;
            si.UseShellExecute = false;
            Process p = Process.Start(si);
            p.StandardInput.WriteLine("show");
            p.StandardInput.WriteLine("exit");
            textBox1.Text = p.StandardOutput.ReadToEnd();
--------------------编程问答-------------------- 内部DOS命令是可以正常指令,输入、输出重定向也没问题,但我调用的是第三方的DOS程序,该程序的执
行方式为:cmd arg1,其中arg1为参数,实际是保存在cmd所在目录下的一个文件。 --------------------编程问答-------------------- 什么文件?exe么?你先启动cmd,然后在cmd中输入arg1呢?能不能启动?cmd只是个环境,你不要把它也带进去,你不是要启动cmd这个进程 --------------------编程问答-------------------- 你加个si.Arguments=arg1看可以不? --------------------编程问答-------------------- 都试过,还是不行,我在改用多线程试试。 --------------------编程问答-------------------- DOS程序是用devC++开发的,不知会不会有影响?
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,