C# Process.Start(“telnet.exe”)引发异常

C# Process.Start(“telnet.exe”)引发异常,c#,64-bit,C#,64 Bit,我有两个应用程序在W2k8 R2 x64上运行,一个编译为64位,另一个编译为32位,因为它具有COM依赖项。 在这两种情况下,我都试图称之为: Process p = Process.Start("telnet.exe", string.Format("{0} {1}", address, port)); 在x64中,它工作得非常好,但是在32位的x64中,我得到一个System.ComponentModel.Win32Exception(“系统找不到指定的文件”) 知道这是怎么回事吗?即使

我有两个应用程序在W2k8 R2 x64上运行,一个编译为64位,另一个编译为32位,因为它具有COM依赖项。 在这两种情况下,我都试图称之为:

Process p = Process.Start("telnet.exe", string.Format("{0} {1}", address, port));
在x64中,它工作得非常好,但是在32位的x64中,我得到一个System.ComponentModel.Win32Exception(“系统找不到指定的文件”)

知道这是怎么回事吗?即使我打电话

Process.Start(@“C:\Windows\System32\telnet.exe”)

我也有同样的例外

谢谢


Tom

Windows Server 2008没有32位telnet.exe客户端。它只在windows\system32文件夹中安装64位版本。

\live.sysinternals.com\tools\procmon.exe和/或procexp始终有答案


您是否在流程的上下文中查看了path环境变量?您可以在其前面加上System\SysWow64路径以使其工作吗?

要从32位应用程序启动system32定位的64位应用程序(至少在Vista上,2k8,7在x64 XP或2k3上不工作),请从sysnative目录运行它,即“C:\windows\sysnative\telnet.exe”(或者禁用Wow64,但这通常是个坏主意)

这让我抓狂。。。有一个项目会在没有完整路径的情况下找到“telnet.exe”,还有一个项目拒绝找到它(即使有路径,或者从未找到它)。我的开发机器是64位的

问题在于构建中的目标平台

如果设置为x86,则找不到telnet

将其设置为telnet将找到的任何CPU


有时您需要将其设置为x86,这允许您的应用程序在64位平台上查看32位驱动程序(如odbc驱动程序)

将telnet.exe复制到SysWow64文件夹

c:\windows\SysWow64文件夹下是否有telnet.exe?如果缺少,则表示您的系统上缺少32位版本的telnet。您登录的用户有权访问system32目录?hm,有没有办法从32位.NET进程启动64位exe?我认为问题在于nithins指出w2k8 R2 x64上没有32位版本的telnet,我正在尝试从32位进程启动64位exe。因为正如我在最初的帖子中所指出的,即使使用完整路径(@“C:\Windows\System32\telnet.exe”)直接调用telnet也会失败,很抱歉没有阅读。从x86进程运行x64 exe应该不会有问题,因为只有当您将其加载到相同的地址空间(例如,为DLL执行Assembly.LoadFrom)时才有问题。啊,您正在获得虚拟化拦截c:\windows\system32并将其转换为syswow64(即32位等效)。使用sysnative而不是system32(对不起,没有x64框可供测试)sysnative仅适用于Vista或更高版本。您可能希望使用File.Exists来生成一个操作系统无关的impl。谷歌搜索的最佳关键词是sysnative x64。2005年,我在Russinovich的一篇文章中发现了使用filemon(procmon的前身)解决这个问题的方法。