带有重定向标准流的C#+ telnet进程立即退出

我正在尝试用C#(类似于Tcl Expect包的东西)做一个’脚本telnet’项目,我需要启动一个telnet进程并重定向(和处理)它的stdin / stdout流。

问题是,生成的telnet进程在启动后立即退出(但它确实启动)。
如果我尝试使用-say- cmd.exe执行相同操作,则可以正常工作。

telnet实现是否需要交互式标准输入? 这个概念甚至存在于Windows中吗?

我正在运行Win7 64位,这是否有助于dscribed行为?

这是我使用的片段:

Process m_process = new Process(); m_process.StartInfo = new ProcessStartInfo( @"C:\Windows\system32\telnet.exe", "towel.blinkenlights.nl"); //required to redirect stdXXX m_process.StartInfo.UseShellExecute = false; m_process.StartInfo.ErrorDialog = false; m_process.StartInfo.RedirectStandardInput = true; m_process.StartInfo.RedirectStandardOutput = true; m_process.StartInfo.RedirectStandardError = true; Thread.Sleep(50); Console.WriteLine(" exited? " + m_process.HasExited); 

输出是:

退出? 真正

如果我用这个:

 ... m_process.StartInfo = new ProcessStartInfo( @"C:\Windows\system32\cmd.exe", ""); ... 

输出是

退出? 假

您使用cmd.exe的实validation明,您已成功启动cmd.exe 。 🙂

您是否尝试在命令提示符窗口中执行C:\Windows\system32\telnet.exe towel.blinkenlights.nl以确保其有效? 完成后,您是否尝试从文件重定向输入(例如, C:\Windows\system32\telnet.exe towel.blinkenlights.nl < filename )?

我怀疑Windows的telnet可能没有使用stdin作为其输入,以便处理终端仿真。

我只是尝试了一个非常简单且可能天真的实验,表明情况就是这样,至少在XP 32位中。 我这样做了:

 echo GET / | telnet www.google.com 80 

...它没有用,而telnet www.google.com 80然后输入GET /并按Enter键。 一个类似的实验与一个读取标准输入的工具( nslookup - 嘿,这是我必须手工)工作正常。

无法重定向Telnet.exe。 可能的原因是它像终端一样,模仿VT100。 你启动它时会看到一个暗示,它会清除屏幕。 只有当程序直接写入控制台屏幕缓冲区时才有可能。 没有已知的方法使其表现不同,set term命令没有非终端模式选项。