2009-11-10 3 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

Есть telnet.exe в папке c: \ windows \ syswow64? Если он отсутствует, значит, в вашей системе отсутствует 32-разрядная версия telnet. –

+0

Ваш зарегистрированный пользователь имеет доступ к каталогу system32? –

ответ

6

Чтобы запустить системное 32-разрядное приложение из 32-разрядного приложения (по крайней мере, на Vista, 2k8,7, не работает на x64 XP или 2k3), запустите его из каталога sysnative, то есть «C: \ windows \ sysnative \ telnet.exe "(альтернативно отключить Wow64, но это, как правило, плохая идея).

+0

Отлично, это отлично работает! благодаря – TJF

0

Windows Server 2008 не имеет 32 бит telnet.exe клиента. Он устанавливает только 64-битную версию в папке windows \ system32.

+0

hm, есть ли способ запустить 64-битный exe из 32-битного .NET-процесса? – TJF

0

\ live.sysinternals.com \ tools \ procmon.exe и/или procexp всегда имеет ответ.

Вы рассматривали переменную среды пути в контексте своего процесса? Можете ли вы префикс его с помощью пути System \ SysWow64, чтобы он работал?

+0

Я думаю, что проблема в том, что нитрины указали, что нет 32-разрядной версии telnet на w2k8 R2 x64, и я пытаюсь запустить 64-битный exe из 32-битного процесса. Потому что, как указано в моем первоначальном сообщении, даже вызов telnet напрямую с полным путем (@ "C: \ Windows \ System32 \ telnet.exe") завершается неудачно – TJF

+0

Ах, извините за то, что не читал. Не должно быть проблем с запуском x64 exe из процесса x86 tho '- это единственная проблема, если вы загружаете его в одно и то же адресное пространство (например, делаете Assembly.LoadFrom для DLL). –

+0

А, вы получаете виртуализацию, перехватывающую c: \ windows \ system32 и переводя ее в syswow64 (т. Е. 32-разрядный эквивалент). –

1

Это сводило меня с ума ... был один проект, который нашел бы «telnet.exe» без полного пути, и тот, кто отказался его найти (даже с помощью пути или никогда не понял). Моя машина Dev 64-бит.

Проблема была в целевой платформе в сборке.

Если он установлен в x86, он не найдет telnet.

установить его в любой процессор будет найти telnet.

иногда вам нужно установить его на x86, это позволяет вашим приложениям видеть 32-разрядные драйверы (такие как драйверы ODBC) на 64-разрядных платформах

Смежные вопросы