2016-07-14 67 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