2010-02-06 20 views
1

我想在C#(類似於Tcl Expect包類似的東西)做一個'scripted telnet'項目,我需要啓動一個telnet進程並重定向(並處理)它的標準輸入/標準輸出流。C#+遠程登錄過程w /重定向標準流立即退出

問題是,產生的telnet進程在啓動後立即退出(但它啓動,但是)。
如果我嘗試使用-say-cmd.exe執行相同的操作,它將起作用。

遠程登錄實施是否需要交互式標準輸入?這個概念是否存在於Windows中?

我正在運行Win7 64位,這可能有助於訂閱的行爲?

這裏的片斷我使用:

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", ""); 
... 

輸出

退出?假

+0

'telnet.exe'不是Windows 7 x64的一部分,不在'c:\ windows \ system32'上 – 2010-02-06 10:43:08

+0

它在我的機器上... – 2010-02-06 15:53:03

回答

1

所有你的實驗cmd.exe證明你是成功啓動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 - 嘿,這是我不得不用的工具)進行的類似實驗效果很好。

3

Telnet.exe無法重定向。可能的原因是,它的行爲像一個終端,仿效VT100。當你啓動它時會看到一個提示,它清除了屏幕。這隻有在程序直接寫入控制檯屏幕緩衝區時纔有可能。沒有已知的方式使其表現不然,set term命令沒有非終端模式選項。