5

我们需要在 64 位 Vista 上运行 32 位版本的远程桌面客户端,因为我们的部分产品集成了它,并通过虚拟通道与终端服务器端应用程序通信。集成加载了一些第三方32位驱动,在64位进程中无法加载32位dll。

通常从命令行运行 32 位版本的 windows 应用程序是很容易的,例如运行窗口:

C:\Windows\SysWOW64\Notepad.exe

您可以通过签入 task monitor\processes 来判断该进程是 32 位的,因为它的文件名旁边将有一个 *32。

但是,远程桌面客户端 (mstsc.exe) 不想玩球。无论我如何启动它(运行窗口、32 位 cmd 窗口等),它总是从 C:\Windows\System32\mstsc.exe 运行 64 位版本。我尝试编写一个 32 位 C++ 程序来创建它(通常子进程也是 32 位的),但这不起作用。

我也试过打电话:

Wow64DisableWow64FsRedirection
Wow64RevertWow64FsRedirection

在启动 mstsc.exe 之前和之后,但这也无济于事。

有人知道解决这个问题的方法吗?

[编辑] 我已经对进程监视器进行了一些进一步的调查,似乎 32 位版本的 mstsc 确实首先启动,但是这会创建第二个 64 位进程并且 32 位版本关闭。

4

5 回答 5

3

你的问题很困惑(1)。系统上的每个可执行文件都被编译32 位64 位可执行文件。如果您有一个 64 位可执行文件,那么您如何调用它并不重要:从 32 位命令窗口、从“运行”菜单或从另一个 32 位程序;它将始终作为 64 位进程运行。

您可以通过在dumpbin /HEADERS mstsc.exe.

您需要下载并安装 32 位版本的mstsc.exe. 事实上,我相信mstsc.exe它在很大程度上独立于安装,因此您可以简单地从 32 位系统复制它并运行它。

更新:
eran指出mstsc.exe直接调用 32 位并不能解决问题,因为mstsc检测到它在 64 位系统上运行并重新调用自身的 64 位版本。我不知道它为什么这样做,或者如何阻止它这样做。如果你这样做,请编辑这个答案。

(1) 微软通过提供许多32 位和 64 位版本的可执行文件,并神奇地重新映射 PATH 以便找到其中一个,极大地帮助了这种混淆;通常在明显相同的路径名。但这只是“smoke and mirrors”,实际上路径名总是不同的。

于 2009-06-17T03:11:14.313 回答
0

您是否尝试过旧版本(例如,来自 Windows 2000)?

于 2009-06-17T15:07:15.297 回答
0

想一想,挂钩 IsWow64Process() 以返回 0 可能会起作用。

于 2009-12-10T18:03:28.713 回答
0

不要试图强制解决问题,而是尝试解决它,例如使用 MSTSC.exe 的替代品,例如FreeRDPmRemoteNG

于 2022-01-07T02:19:37.863 回答