首页 Soft PlugIn RAN乱 Dev开发 Info资料 English WAP 留言 登陆 注册
-
Posted by Yippee | 评论(2) | 引用(0) | 阅读3346次
VS.NET PROCESS 输入 输出 模拟 CMD

1101 VS.NET PROCESS 输入 输出 模拟 CMD 很久以前的老文章

vs.net c# 一个调用外部程序的例子 http://www.shengfang.org/blog/p/vsnetStartInfoProcess.php Process.StandardOutput 属性 http://www.shengfang.org/blog/p/ProcessStandardOutput.php

今天看到有人回复 www.shengfang.org 有关程序中调用执行控制台应用程序并交互疑问!和楼主的文章最后一个问题相似。输入一个命令,获得输出,判断该输出内容并输入相应命令,再获得输出值...重复以上动作。 www.shengfang.org

试验了一下 要使用 StandardInput,必须已为 StartInfo 属性的 RedirectStandardInput 属性指定了 true。否则,读取 StandardInput 属性将引发异常。
注意   如果要将 StandardInput 设置为 true,则 StartInfo 属性上的 UseShellExecute 必须为 false。
www.shengfang.org

ProcessStartInfo.RedirectStandardInput 属性请参见
获取或设置一个值,该值指示是否从 Process 实例的 StandardInput 成员读取进程命令输入,从而使您能够从标准输入流(通常为键盘)之外的源进行读取。例如,用于从文件读取数据。

private void DisplayOutput() www.shengfang.org
{
 while ( proc != null && !proc.HasExited )
  {
    string strLine = null;
    while (  ( strLine = proc.StandardOutput.ReadLine() ) != null)
    {
   Trace.WriteLine(strLine);
     m_txtOutput.AppendText( strLine + "\r\n" );
     } www.shengfang.org

   }
} www.shengfang.org

  Thread m_threadOutput; www.shengfang.org
  Process proc; www.shengfang.org
  
  private void menuItem1_Click(object sender, System.EventArgs e)
  {
   proc = new Process(); www.shengfang.org
   proc .StartInfo.FileName = "cmd";
   proc .StartInfo.WorkingDirectory = "c:\\";
   proc .StartInfo.CreateNoWindow = true;
   proc .StartInfo.UseShellExecute = false;
   proc .StartInfo.RedirectStandardOutput = true;
   proc .StartInfo.RedirectStandardInput = true;
   proc .Start();  www.shengfang.org
   [hide]m_threadOutput = new Thread( new ThreadStart( DisplayOutput ) );
   m_threadOutput.Start(); [/hide]
   } www.shengfang.org

private void menuItem3_Click(object sender, System.EventArgs e)
  { www.shengfang.org
   proc.StandardInput.WriteLine("dir");
   }

如何在图形界面中实时捕获控制台程序的标准输出
http://www.contextfree.net/wangyg/b/tech/myide.html

ShellControl - A console emulation control
http://www.codeproject.com/cs/miscctrl/shellcontrol.asp

1.判断命令是否执行结束并获得这个命令执行后返回的结果?(连续执行多个命令)
DOTNET程序获得输出不全.
当直接执行控制台程序,在控制台中输入命令,执行完成后为出现 "XXX>"提示符等待继续输入.
由于程序采用多线程执行,本想用 "XXX>"提示符号, 来判断命令是否执行结束.
如果程序执行后,获得该命令执行得到的返内容,在执行下一命令...
但DOTNET程序却无法获得这一符号.而java写的程序却都能得到.


字体:

Permanant URI永久地址 http://www.shengfang.org/blog/p/vsnetprocesscmdinout.php
Trackback URI引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1131575302

2005年11月10日06:28星期四  [Dev开发] 追踪此文的RSS
该评论由手机发表文在 2005年12月5日00:24星期一 评论:
我想下载.该怎样做?
Yippee 回复于 2005年12月5日09:00
能否具体说明?

Jarod在 2005年11月2日10:39星期三 评论:
非常感谢!
我调用的是HP公司的控制台应用程序。
将p.StandardOutput.ReadLine()//按行读取
替换为:
Proc.StandardOutput.ReadBlock(character, 0, 1);//按字符读取然后转换成字符串;
这样就可以得到 “XXX>”提示符号。

原因是ReadLine()读取整行;而XXX>这行还在等待输入。就处于堵塞状态。 Emotion
Yippee 回复于 2005年11月2日10:53
XXX>这行还在等待输入。就处于堵塞状态。我也谢谢你,因为当时比较匆促,没有仔细考虑,的确,此时还处于堵塞状态。:)

称呼:    登陆   注册
   不注册,但记住我的信息
邮件:
(非必须)
评论: [UBB代码帮助]
粗体 斜体 下划线 链接 水平线 引用



验证码: 请输入你看见的数字
关闭UBB      提交时自动将内容复制到剪贴板

公告





统计信息
[Yippee]||[统计]||日志:2143
在线: 23||用户: 2635 [列表]
今日:634||到访:3654419
Rss:||评论:1668

最新日志

最新评论

友情链接

日历
342009 - 0734
   1234
567891011
12131415161718
19202122232425
262728293031 

最新引用
搜索

归档

杂项
Get RSS Feed (Version 2.0)
Get Atom Feed (Version 0.3)
编码:  UTF-8