带有重定向标准流的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命令没有非终端模式选项。
- ‘XDevkit.IXboxDebugTarget.GetMemory(uint,uint,byte ,out uint)’的最佳重载方法匹配有一些无效的参数
- 解析缺少乘法符号的数学表达式
- 如何在SharpSvn中检查文件是否受源代码控制?
- ASP.NET Identity的默认密码哈希 – 它是如何工作的并且是否安全?
- PropertyInfo.DeclaringType真的可以为null吗?
- 如何在C#Winforms中的app.config中保存配置
- DateTime.ParseExact格式字符串
- Windows中的哪个进程是用户特定的?
- System.Threading.Tasks中的NullReferenceException调用HttpClient.GetAsync(url)