Как заставить 32-битную версию клиента удаленного рабочего стола работать на 64-битной Vista? - PullRequest
4 голосов
/ 16 июня 2009

Нам необходимо запустить 32-разрядную версию клиента удаленного рабочего стола в 64-разрядной версии Vista, поскольку часть нашего продукта интегрируется с ним и взаимодействует с приложением на стороне сервера терминалов через виртуальный канал. Интеграция загружает некоторые сторонние 32-битные драйверы, и невозможно загрузить 32-битную DLL в 64-битном процессе.

Обычно 32-битную версию Windows-приложения довольно просто запустить из командной строки, например, окно запуска:

C:\Windows\SysWOW64\Notepad.exe

Вы можете сказать, что процесс 32-битный, отметив в мониторе задач \ процессы, так как он будет иметь * 32 рядом с именем файла.

Однако клиент удаленного рабочего стола (mstsc.exe) не хочет играть в мяч. Он всегда запускает 64-битную версию из C: \ Windows \ System32 \ mstsc.exe независимо от того, как я ее запускаю (окно запуска, 32-битные окна cmd и т. Д.). Я пытался написать 32-битную программу на C ++ для ее создания (обычно дочерние процессы также 32-битные), но это не сработало.

Я также пытался позвонить:

Wow64DisableWow64FsRedirection
Wow64RevertWow64FsRedirection

до и после запуска mstsc.exe, но это тоже не помогло.

Кто-нибудь знает способ обойти это?

[Изменить] Я провел дополнительное исследование с помощью монитора процессов, и кажется, что сначала запускается 32-разрядная версия mstsc, но затем создается второй 64-разрядный процесс, а 32-разрядные версии закрываются.

Ответы [ 4 ]

3 голосов
/ 17 июня 2009

Ваш вопрос очень запутан (1). Каждый исполняемый файл в системе компилируется или как 32-битный, или как 64-битный исполняемый файл. Если у вас есть 64-битный исполняемый файл, то не имеет значения, как вы его вызываете: из 32-битного командного окна, из меню «Выполнить» или из другой 32-битной программы; всегда будет работать как 64-битный процесс.

Вы можете проверить, является ли исполняемый файл 32-битным или 64-битным, найдя x64 в выводе dumpbin /HEADERS mstsc.exe.

Вам необходимо загрузить и установить 32-разрядную версию mstsc.exe. На самом деле, я считаю, что mstsc.exe в значительной степени не зависит от установки, поэтому вы можете просто скопировать его из 32-разрядной системы и просто запустить.

ОБНОВЛЕНИЕ:
eran указывает на то, что прямой вызов 32-разрядного mstsc.exe не решает проблему, поскольку mstsc обнаруживает, что он работает в 64-разрядной системе, и повторно вызывает 64-битная версия сама по себе. Я не знаю, почему это происходит, или как это остановить. Если да, отредактируйте этот ответ.

(1) Microsoft очень помогает в этой путанице, отправляя множество исполняемых файлов в виде и 32, и 64-битных версий, и волшебным образом переназначая PATH, чтобы найти один или другой; часто в очевидно того же пути. Но это просто «дым и зеркала», на самом деле путь всегда другой.

1 голос
/ 04 ноября 2010
0 голосов
/ 10 декабря 2009

Если подумать, перехват IsWow64Process () для возврата 0 может сработать.

0 голосов
/ 17 июня 2009

Вы уже пробовали старую версию (скажем, из Windows 2000)?

...