Process.Start («telnet.exe») выдает исключение

У меня есть два приложения, работающие на W2k8 R2 x64, одно скомпилировано как 64-битное, а другое как 32-битное, поскольку оно имеет COM-зависимости. В обоих я пытаюсь позвонить:

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

В x64 он работает отлично, однако в 32-битном я получаю System.ComponentModel.Win32Exception («Система не может найти указанный файл»)?

Есть идеи, что здесь происходит? Даже если я позвоню

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

Я получаю такое же исключение?

Спасибо,

Том

10.11.2009 20:24:01
Есть ли telnet.exe в папке c: \ windows \ syswow64? Если он отсутствует, это означает, что 32-разрядная версия telnet отсутствует в вашей системе.
Sedat Kapanoglu 10.11.2009 20:26:14
Ваш зарегистрированный пользователь имеет доступ к каталогу system32?
Rubens Farias 10.11.2009 20:27:39
5 ОТВЕТОВ
РЕШЕНИЕ

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

6
10.11.2009 21:33:33

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

0
10.11.2009 20:32:18
хм, есть ли способ запустить 64-битный exe из 32-битного .NET-процесса?
TJF 10.11.2009 20:36:54

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

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

0
10.11.2009 20:51:51
Я думаю, что проблема в том, что нитинс указал, что на w2k8 R2 x64 нет 32-битной версии telnet, и я пытаюсь запустить 64-битный exe из 32-битного процесса. Потому что, как указано в моем исходном сообщении, даже вызов telnet напрямую с полным путем (@ "C: \ Windows \ System32 \ telnet.exe") завершается неудачей
TJF 10.11.2009 21:34:27
Ах, извините, что не читал. Не должно быть проблем с запуском x64 exe из процесса x86 tho '- это проблема, только если вы загружаете его в одно и то же адресное пространство (например, делаете Assembly.LoadFrom для DLL).
Ruben Bartelink 10.11.2009 21:39:00
Ах, вы получаете виртуализацию, перехватывая c: \ windows \ system32 и переводя ее в syswow64 (то есть 32-битный эквивалент).
Ruben Bartelink 10.11.2009 21:40:08
blog.joeware.net/2009/08/28/1688 использовать sysnative вместо system32 (у меня нет x64 коробки для тестирования, извините)
Ruben Bartelink 10.11.2009 21:50:43
SysNative работает только в Vista или более поздней версии. Возможно, вы захотите использовать File.Exists, чтобы придумать ОС нейтральный импл. Лучшее ключевое слово для поиска в Google - sysnative x64. И я нашел сообщение от Руссиновича в 2005 году, в котором это объясняется с помощью filemon [который является предшественником procmon].
Ruben Bartelink 10.11.2009 21:54:43

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

Проблема заключалась в целевой платформе в сборке.

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

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

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

1
4.03.2010 17:26:20

скопируйте telnet.exe в папку SysWow64

0
24.05.2011 02:38:17