2009-11-10 27 views
0

我有兩個應用程序在W2k8 R2 x64上運行,一個編譯爲64位,另一個編譯爲32位,因爲它具有COM依賴關係。 在這兩個我試圖撥打:Process.Start(「telnet.exe」)拋出異常

Process p = Process.Start("telnet.exe", string.Format("{0} {1}", address, port)); 

在這工作完全正常的64位,但是在32位的一個,我收到了System.ComponentModel.Win32Exception(以下簡稱「系統找不到指定文件」)?

任何想法這裏發生了什麼?即使我打電話

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

我得到相同的異常?

感謝,

湯姆

+0

有c:\ windows \ syswow64文件夾下的telnet.exe?如果缺失,則意味着系統上缺少32位版本的telnet。 – 2009-11-10 20:26:14

+0

您登錄的用戶有權訪問system32目錄? – 2009-11-10 20:27:39

回答

6

要從32位應用程序(至少在Vista上,2k8,7,不能在x64 XP或2k3上運行)啓動位於64位應用程序的system32,請從sysnative目錄運行它,即「C:\ windows \ sysnative \ telnet.exe「(或者禁用Wow64,但這通常是一個壞主意)。

+0

完美,這很好!謝謝 – TJF 2009-11-10 23:24:13

0

Windows Server 2008中沒有一個32位客戶端TELNET.EXE。它只在Windows \ system32文件夾中安裝64位版本。

+0

hm,有沒有辦法從32位.NET進程啓動64位exe文件? – TJF 2009-11-10 20:36:54

0

\ live.sysinternals.com \ tools \ procmon.exe和/或procexp總是有答案。

您是否在過程的上下文中查看了路徑環境變量?你能用System \ SysWow64路徑加前綴來使它工作嗎?

+0

我認爲這個問題是因爲nithins表示在w2k8 R2 x64上沒有32位版本的telnet,我試圖從32位進程啓動64位exe。因爲正如我原來的帖子所指出的,即使直接使用完整路徑(@「C:\ Windows \ System32 \ telnet.exe」)呼叫telnet也會失敗 – TJF 2009-11-10 21:34:27

+0

啊,抱歉沒有閱讀。從x86進程運行x64 exe應該不會有問題 - 如果將它加載到相同的地址空間(例如,爲DLL執行Assembly.LoadFrom),這只是一個問題。 – 2009-11-10 21:39:00

+0

啊,你得到的虛擬化攔截c:\ windows \ system32並將其翻譯成syswow64(即32位等效)。 – 2009-11-10 21:40:08

1

這讓我瘋狂......有一個項目會發現沒有完整路徑的「telnet.exe」,有一個項目拒絕找到它(即使是路徑,或者從來沒有找到它)。我的開發機器是64位。

問題是構建目標平臺。

如果它設置爲x86,它將不會找到telnet。

將它設置爲任意CPU吧找到telnet。

有時你需要將其設置爲86,這可以讓你的應用程序,看看32位驅動程序(如ODBC驅動程序),在64位平臺

0

副本TELNET.EXE到SYSWOW64文件夾