是这样的,我通过Process.Start(***)执行控制台程序。然后
获取控制台界面上打印出来的文本保存到文件中。。
有什么办法可以实现这个功能吗??
或者谁知道用C#怎么获取进程的EProcess??
望指点小弟一二,先谢了。。

解决方案 »

  1.   

    private string[] RunCmd(string[] command) 
             { 
                 Process process = new Process(); 
      
                 process.StartInfo.FileName = "cmd.exe";                 // Run this program 
                 process.StartInfo.UseShellExecute = false;              // Must be false 
                 process.StartInfo.RedirectStandardInput = true;         // Redirect input stream 
                 process.StartInfo.RedirectStandardOutput = true;        // Redirect output stream 
                 process.StartInfo.RedirectStandardError = true;         // Redirect error stream 
                 process.StartInfo.CreateNoWindow = true;                // All commands run in one window 
      
                 process.Start(); 
      
                 StreamWriter sw = process.StandardInput; 
                 sw.AutoFlush = true; 
                 StreamReader srout = process.StandardOutput; 
                 StreamReader srerr = process.StandardError; 
      
                 for (int i = 0; i < command.Length; i++) 
                 { 
                     sw.WriteLine(command[i]); 
                 } 
      
                 sw.Close(); 
      
                 string[] output = new string[2]; 
      
                 output[0] = srout.ReadToEnd(); 
                 output[1] = srerr.ReadToEnd(); 
      
                 srerr.Close(); 
                 srout.Close(); 
      
                 process.WaitForExit(); 
                 process.Close(); 
      
                 return output; 
             } 
      
      

  2.   

    Trace来输出到 文件
    Trace.Listeners.Clear();
    Trace.Listeners.Add(new TextWriterTraceListener(logFile));
    Trace.AutoFlush = true;
    Trace.WriteLine(strData);
      

  3.   


    用你的方法可以看到进程是启动了。但是输入的命令无效。
    不知道是为什么。我要启动的进程是http://www.xuetr.com/?p=123
    上面这个地址的XueTrCmd.exe
    给命令ps能显示出全部系统进程信息
    但是直接双击XueTrCmd.exe能打开,用Process.start()就无法启动,为什么呢?
      

  4.   

    用lijun84的方法是可以打开进程,如果是CMD就正常运行
    但是XueTrCmd.exe就不可以,不知道是为什么?
      

  5.   

    XueTrCmd.exe 要指定绝对路径。ProcessStartInfo psi = new ProcessStartInfo();
    psi.FileName = "你XueTrCmd.exe的绝对路径";
      

  6.   


    我已经设置成绝对路径了。。还是不可以。。
    断点发现运行到string output = srout.ReadToEnd();
    就卡住了。。
    好像在等待什么~~查看任务管理器,XueTrCmd.exe占用百分百CPU,不明白为什么?
    但是在CMD上直接调用XueTrCmd.exe就没有问题。
    郁闷...
      

  7.   

    那就用cmd调。process.StartInfo.FileName = "cmd.exe /c XueTrCmd.exe的绝对路径"
      

  8.   

    上面写错了...改下:process.StartInfo.FileName = "cmd.exe"
    process.StartInfo.Argument = " /c XueTrCmd.exe的绝对路径"
      

  9.   


    还是不可以。。还是卡在string output = srout.ReadToEnd();这个语句这。。
    想不明白为什么!
      

  10.   

    应该是有什么console交互阻塞了,你看看XueTrCmd.exe有没有什么help的。有类似问题,比如:XCopy在遇到目标路径已经有同名文件,就会停下来询问是否要覆盖。
      

  11.   

    使用方法:
    1.直接XueTrCmd.exe运行,这个会进入到一个循环中,这个循环里反复接收用户输入的命令,退出这个循环后,会自动卸载驱动程序。
    2.XueTrCmd.exe带参数运行,这个会执行具体的参数命令,程序退出时,不会卸载驱动程序。
      

  12.   

    我看这个工具的介绍:http://bbs.bathome.net/viewthread.php?tid=95201.直接XueTrCmd.exe运行,这个会进入到一个循环中,这个循环里反复接收用户输入的命令如果有等待用户输入,Process就会阻塞,这样ReadToEnd就会阻塞
    另外,如果你配好参数直接用 cmd.exe /c "...\XueTrCmd.exe" > D:\1.txt 就可以输出到一个文本文件中。
    cmd.exe ... > D:\1.txt 就表示重定向输出。你就不用ReadToEnd再写文件了。
      

  13.   

    那你就应该带参数运行,比如:process.StartInfo.Argument = " /c XueTrCmd.exe的绝对路径  fkp 0x81876550 > D:\1.txt"上面这样运行,也不用ReadToEnd了。
      

  14.   

    有什么办法可以获得进程的EProcess吗??其实我调用这个程序目的也就是想获得EProcess
    网上说了不少办法,但是都行不通。有些是可以获取EProcess,但是不是全部获取。
    只是部分获取,有些进程不允许访问的。XueTrCmd.exe可以访问任何进程EProcess
    所以就想到调用它
      

  15.   

    只要cmd.exe上能输出内容就能重定向。有可能是StandardOutput,有可能是StandardErrorprocess.StartInfo.Argument = " /c XueTrCmd.exe的绝对路径 fkp 0x81876550 > D:\1.txt 2>&1"把 stdout 和 stderr 一起重定向到 file 文件中 
      

  16.   

    在CMD上只能这样才显示:
    cmd
    d:
    xuetrcmd.exe
    ps//xuetrcmd.exe 命令