2016-07-14 70 views
0

我使用C#與控制檯程序來創建新的cmd進程,沒有重定向stdin或stdout,所以我可以從這裏鍵入命令行。 (我從那裏使用telnet時遇到問題,所以這一步只是一個調查。) 能夠輸入到窗口並接收輸出。 當我切換到c:Windows \ system32時,鍵入dir te * .exe不顯示任何內容。 在我直接創建的另一個命令提示符中,我看到文件(telnet.exe)。 有什麼不對的建議?C#cmd提示符無法看到telnet.exe

{ 

     ProcessStartInfo startInfo = new ProcessStartInfo(@"cmd.exe"); 
     startInfo.UseShellExecute = false; 
     startInfo.CreateNoWindow = true; 
     startInfo.WindowStyle = ProcessWindowStyle.Normal; 
     startInfo.CreateNoWindow = false; 
     startInfo.Arguments = host; 
     using (Process p = new Process()) 
     { 
      p.StartInfo = startInfo; 
      p.Start(); 
     } 
    } 
+0

嘗試輸入'那裏telnet'進入命令提示符 - 它應該告訴你你的可執行文件的位置。結果是什麼? –

+0

在Windows 7中運行 - 忘了提及這一點。 –

+0

C:\ Windows \ system32>其中telnet 信息:無法找到給定模式的文件。 –

回答

3

由於Windows 7,我相信你必須安裝Telnet作爲Windows功能。

Here你有一個指南,在Win 7中啓用Telnet,但它適用於贏得8.1以及Windows 10

萬一你不能閱讀網站,步驟是:

轉到控制面板 - >程序 - >打開或關閉Windows功能 - >向下滾動,直到找到Telnet客戶端選項

+0

運行應用程序我相信這篇文章與我的問題完全相同: http://stackoverflow.com/questions/33984146/ c-sharp-new-process-created-can-access-certain-files?rq = 1 –

0

根據上述文章,查看了項目構建屬性。 平臺目標被設置爲x86。 更改爲「任何CPU」至少可以讓我看到程序!

BTW我已經看過的答案几天張貼此之前,但在相關的保證金 - 「創建不能訪問某些文件C#新工藝」給我的信息 - 我創造了這個問題

感謝後,啓發式!

+0

呵呵!這就是我花了這麼長時間打出我的迴應。我很高興你找到答案。 – seairth

+0

您可以使用以下命令始終獲取系統本地system32位文件夾,32位或64位進程或操作系統'字符串sysFolder64Bit; 如果(Environment.Is64BitOperatingSystem && Environment.Is64BitProcess!) { sysFolder64Bit = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), 「sysnative」); } else { sysFolder64Bit = Environment.GetFolderPath(Environment.SpecialFolder.System); }' –

+0

只有當您是64位系統上的32位進程時,才能看到'sysnative'文件夾。任何其他組合都不會存在。 –

0

這是一個非常狡猾的。當您使用Windows資源管理器或直接打開命令提示符時,您正在啓動一個64位進程。當您使用Process.Start()啓動「cmd.exe」時,您將獲得與啓動它的過程相同的版本。在你的情況下,你正在創建一個32位的進程,所以你得到了32位版本的命令提示符。如果您更改項目以創建目標x64,則會看到這些文件!

這是爲什麼?因爲,根據您是通過32位還是64位應用程序訪問System32,您實際上正在訪問不同的 System32文件夾!欲瞭解更多關於此,請點擊此鏈接:

https://superuser.com/questions/330941/some-files-in-system32-not-accessible-outside-explorer-on-windows-7