求助:如何获取控制台程序的输出文本

snake4 2010-12-07 07:52:08
是这样的,我通过Process.Start(***)执行控制台程序。然后
获取控制台界面上打印出来的文本保存到文件中。。
有什么办法可以实现这个功能吗??
或者谁知道用C#怎么获取进程的EProcess??
望指点小弟一二,先谢了。。
...全文
643 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
snake4 2010-12-08
  • 打赏
  • 举报
回复
在CMD上只能这样才显示:
cmd
d:
xuetrcmd.exe
ps//xuetrcmd.exe 命令
snake4 2010-12-08
  • 打赏
  • 举报
回复
都不可以。。。无语。。。。
机器人 2010-12-08
  • 打赏
  • 举报
回复
只要cmd.exe上能输出内容就能重定向。

有可能是StandardOutput,有可能是StandardError

process.StartInfo.Argument = " /c XueTrCmd.exe的绝对路径 fkp 0x81876550 > D:\1.txt 2>&1"

把 stdout 和 stderr 一起重定向到 file 文件中
snake4 2010-12-08
  • 打赏
  • 举报
回复
有什么办法可以获得进程的EProcess吗??其实我调用这个程序目的也就是想获得EProcess
网上说了不少办法,但是都行不通。有些是可以获取EProcess,但是不是全部获取。
只是部分获取,有些进程不允许访问的。XueTrCmd.exe可以访问任何进程EProcess
所以就想到调用它
snake4 2010-12-07
  • 打赏
  • 举报
回复
关键是这个程序不支持重定向输出。。哎。。
输出的是空白文本的。
机器人 2010-12-07
  • 打赏
  • 举报
回复
那你就应该带参数运行,比如:

process.StartInfo.Argument = " /c XueTrCmd.exe的绝对路径 fkp 0x81876550 > D:\1.txt"

上面这样运行,也不用ReadToEnd了。
机器人 2010-12-07
  • 打赏
  • 举报
回复
我看这个工具的介绍:http://bbs.bathome.net/viewthread.php?tid=9520

1.直接XueTrCmd.exe运行,这个会进入到一个循环中,这个循环里反复接收用户输入的命令。。。

如果有等待用户输入,Process就会阻塞,这样ReadToEnd就会阻塞
另外,如果你配好参数直接用 cmd.exe /c "...\XueTrCmd.exe" > D:\1.txt 就可以输出到一个文本文件中。
cmd.exe ... > D:\1.txt 就表示重定向输出。你就不用ReadToEnd再写文件了。


snake4 2010-12-07
  • 打赏
  • 举报
回复
楼上的,给你发了消息。
snake4 2010-12-07
  • 打赏
  • 举报
回复
使用方法:
1.直接XueTrCmd.exe运行,这个会进入到一个循环中,这个循环里反复接收用户输入的命令,退出这个循环后,会自动卸载驱动程序。
2.XueTrCmd.exe带参数运行,这个会执行具体的参数命令,程序退出时,不会卸载驱动程序。
机器人 2010-12-07
  • 打赏
  • 举报
回复
应该是有什么console交互阻塞了,你看看XueTrCmd.exe有没有什么help的。

有类似问题,比如:XCopy在遇到目标路径已经有同名文件,就会停下来询问是否要覆盖。



snake4 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 fangxinggood 的回复:]

上面写错了...改下:

process.StartInfo.FileName = "cmd.exe"
process.StartInfo.Argument = " /c XueTrCmd.exe的绝对路径"
[/Quote]

还是不可以。。还是卡在string output = srout.ReadToEnd();这个语句这。。
想不明白为什么!
机器人 2010-12-07
  • 打赏
  • 举报
回复
上面写错了...改下:

process.StartInfo.FileName = "cmd.exe"
process.StartInfo.Argument = " /c XueTrCmd.exe的绝对路径"
机器人 2010-12-07
  • 打赏
  • 举报
回复
那就用cmd调。

process.StartInfo.FileName = "cmd.exe /c XueTrCmd.exe的绝对路径"

snake4 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fangxinggood 的回复:]

XueTrCmd.exe 要指定绝对路径。

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "你XueTrCmd.exe的绝对路径";
[/Quote]

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

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "你XueTrCmd.exe的绝对路径";
snake4 2010-12-07
  • 打赏
  • 举报
回复
但是在CMD里面可以执行
snake4 2010-12-07
  • 打赏
  • 举报
回复
用lijun84的方法是可以打开进程,如果是CMD就正常运行
但是XueTrCmd.exe就不可以,不知道是为什么?
snake4 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lijun84 的回复:]

private string[] RunCmd(string[] command)
{
Process process = new Process();

process.StartInfo.FileName = "cmd.exe"; // Run this program
……
[/Quote]

用你的方法可以看到进程是启动了。但是输入的命令无效。
不知道是为什么。我要启动的进程是http://www.xuetr.com/?p=123
上面这个地址的XueTrCmd.exe
给命令ps能显示出全部系统进程信息
但是直接双击XueTrCmd.exe能打开,用Process.start()就无法启动,为什么呢?
wuyq11 2010-12-07
  • 打赏
  • 举报
回复
Trace来输出到 文件
Trace.Listeners.Clear();
Trace.Listeners.Add(new TextWriterTraceListener(logFile));
Trace.AutoFlush = true;
Trace.WriteLine(strData);
机器人 2010-12-07
  • 打赏
  • 举报
回复
EProcess 是什么?
加载更多回复(1)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧