是这样的,我通过Process.Start(***)执行控制台程序。然后
获取控制台界面上打印出来的文本保存到文件中。。
有什么办法可以实现这个功能吗??
或者谁知道用C#怎么获取进程的EProcess??
望指点小弟一二,先谢了。。
获取控制台界面上打印出来的文本保存到文件中。。
有什么办法可以实现这个功能吗??
或者谁知道用C#怎么获取进程的EProcess??
望指点小弟一二,先谢了。。
解决方案 »
- iis无法访问虚拟目录下的文件
- txt批量导入数据库的问题.
- WPF DataGrid行的折叠与展开
- 大家看看我设置的table属性为什么不起作用
- winForm中的axWebBrowser,在axWebBrowser中点击连接,如何在winForm 中知道点击了那个连接。。
- WinForm中如何找到指定的动态生成的控件?
- 是中国人就进来看---上海反日大游行。老子没分散也要淹割 -- 苟日的劣等动物!!!
- 如何作一个游戏对战平台?
- 从派生类访问基类的非私有成员
- WEB开发过程中的TreeView问题
- C# 中(DllImport)调用 Delphi 的 DLL时,一个Record结构体定义问题。
- string转换成double的问题
{
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;
}
Trace.Listeners.Clear();
Trace.Listeners.Add(new TextWriterTraceListener(logFile));
Trace.AutoFlush = true;
Trace.WriteLine(strData);
用你的方法可以看到进程是启动了。但是输入的命令无效。
不知道是为什么。我要启动的进程是http://www.xuetr.com/?p=123
上面这个地址的XueTrCmd.exe
给命令ps能显示出全部系统进程信息
但是直接双击XueTrCmd.exe能打开,用Process.start()就无法启动,为什么呢?
但是XueTrCmd.exe就不可以,不知道是为什么?
psi.FileName = "你XueTrCmd.exe的绝对路径";
我已经设置成绝对路径了。。还是不可以。。
断点发现运行到string output = srout.ReadToEnd();
就卡住了。。
好像在等待什么~~查看任务管理器,XueTrCmd.exe占用百分百CPU,不明白为什么?
但是在CMD上直接调用XueTrCmd.exe就没有问题。
郁闷...
process.StartInfo.Argument = " /c XueTrCmd.exe的绝对路径"
还是不可以。。还是卡在string output = srout.ReadToEnd();这个语句这。。
想不明白为什么!
1.直接XueTrCmd.exe运行,这个会进入到一个循环中,这个循环里反复接收用户输入的命令,退出这个循环后,会自动卸载驱动程序。
2.XueTrCmd.exe带参数运行,这个会执行具体的参数命令,程序退出时,不会卸载驱动程序。
另外,如果你配好参数直接用 cmd.exe /c "...\XueTrCmd.exe" > D:\1.txt 就可以输出到一个文本文件中。
cmd.exe ... > D:\1.txt 就表示重定向输出。你就不用ReadToEnd再写文件了。
网上说了不少办法,但是都行不通。有些是可以获取EProcess,但是不是全部获取。
只是部分获取,有些进程不允许访问的。XueTrCmd.exe可以访问任何进程EProcess
所以就想到调用它
cmd
d:
xuetrcmd.exe
ps//xuetrcmd.exe 命令