none
C/S程序中获取DOS执行信息时的问题 RRS feed

  • 问题

  • Process p = new Process();
          p.StartInfo.FileName = "cmd.exe";
    
    
          p.StartInfo.UseShellExecute = false;
          p.StartInfo.RedirectStandardInput = true;
          p.StartInfo.RedirectStandardOutput = true;
          p.StartInfo.RedirectStandardError = true;
          p.StartInfo.CreateNoWindow = true;
          p.Start();
          p.StandardInput.WriteLine("ipconfig");
    
          string line =p.StandardOutput.ReadToEnd();
    
          p.WaitForExit();
          p.Close();
    
    这段代码在线程里面
    string line =p.StandardOutput.ReadToEnd();走到这的时候就不走了。这是为什么啊?
    我换下面这种方式
    StreamReader reader = p.StandardOutput;
          string line = reader.ReadLine();
          while (!reader.EndOfStream)
          {
            line += "\r\n" + reader.ReadLine();
          }
    一行一行读的时候,也是一样,while没执行完就不走了。但是我看了line里面的内容,和CMD里面的一样完整。<br/>请问高手,这是何故啊?<br/>
    
    2010年9月21日 4:36

答案

  • Process p = new Process();
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.FileName = "ipconfig.exe";
    p.Start();
    p.WaitForExit();
    string line = p.StandardOutput.ReadToEnd();
    

    知识改变命运,奋斗成就人生!
    • 已标记为答案 2010年9月21日 7:11
    2010年9月21日 6:08
    版主
  • 方法一样,通过 p.StartInfo.Arguments 设置命令参数
    知识改变命运,奋斗成就人生!
    • 已标记为答案 2010年9月21日 7:11
    2010年9月21日 6:39
    版主

全部回复

  • Process p = new Process();
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.FileName = "ipconfig.exe";
    p.Start();
    p.WaitForExit();
    string line = p.StandardOutput.ReadToEnd();
    

    知识改变命运,奋斗成就人生!
    • 已标记为答案 2010年9月21日 7:11
    2010年9月21日 6:08
    版主
  • 谢谢你的回复。

      如果我想执行:rasdial.exe ADSL 494110 abcdefj /phonebook:rasphone.pbk;

      参数怎么写进入?

    2010年9月21日 6:34
  • 方法一样,通过 p.StartInfo.Arguments 设置命令参数
    知识改变命运,奋斗成就人生!
    • 已标记为答案 2010年9月21日 7:11
    2010年9月21日 6:39
    版主
  • 解决了。谢谢你~
    2010年9月21日 7:11