I’m trying to do a ‘scripted telnet’ project in C# (something vaguely resembling the Tcl Expect package) for which I need to start a telnet process and redirect (and process) its stdin/stdout streams.
The problem is, the spawned telnet process quits immediately after starting (it does start, however).
If I try to do the same with -say- cmd.exe, it works.
Does the telnet implementation require an interactive stdin? Does this concept even exist in Windows?
I’m running Win7 64 bit, could this contribute to the dscribed behaviour?
Here’s the snippet i use:
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);
The output is:
exited? True
If I use this:
...
m_process.StartInfo = new ProcessStartInfo(
@"C:\Windows\system32\cmd.exe", "");
...
the output is
exited? False
All that your experiments with
cmd.exeprove is that you’re successfully launchingcmd.exe. 🙂Have you tried doing
C:\Windows\system32\telnet.exe towel.blinkenlights.nlin a command prompt window to make sure that works? Having done that, have you tried redirecting input to it from a file (e.g.,C:\Windows\system32\telnet.exe towel.blinkenlights.nl < filename)?I suspect that Windows’ telnet may not be using stdin for its input, in order to handle terminal emulation.
I just tried a very simple and possibly naive experiment suggesting that that’s the case, at least in XP 32-bit. I did this:
…and it didn’t work, whereas
telnet www.google.com 80and then typingGET /and pressing enter does. A similar experiment with a tool that does read stdin (nslookup— hey, it was what I had to hand) worked fine.