C++ 如何强制32位版本的远程桌面客户端在64位Vista上运行?

C++ 如何强制32位版本的远程桌面客户端在64位Vista上运行?,c++,64-bit,remote-desktop,vista64,C++,64 Bit,Remote Desktop,Vista64,我们需要在64位Vista上运行32位版本的远程桌面客户端,因为我们的部分产品与之集成,并通过虚拟通道与终端服务器端应用程序通信。集成将加载一些第三方32位驱动程序,并且无法在64位进程中加载32位dll 通常,从命令行运行32位版本的windows应用程序非常容易,例如运行窗口: C:\Windows\SysWOW64\Notepad.exe 您可以通过签入task monitor\processes来判断进程是32位的,因为它的文件名旁边有一个*32 但是,远程桌面客户端(mstsc.ex

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

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

C:\Windows\SysWOW64\Notepad.exe
您可以通过签入task monitor\processes来判断进程是32位的,因为它的文件名旁边有一个*32

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

Wow64DisableWow64FsRedirection
Wow64RevertWow64FsRedirection
启动mstsc.exe之前和之后,但这也没有帮助

有人知道这件事吗

[编辑]
我对process monitor做了一些进一步的调查,看起来mstsc的32位版本确实是先启动的,但这会创建第二个64位进程,32位版本将关闭。

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

通过在
dumpbin/HEADERS mstsc.exe
的输出中查找x64,可以检查可执行文件是32位还是64位

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

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


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

您尝试过旧版本(比如Windows 2000)吗?

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

请参见

这可能属于serverfault。comI问了关于serverfault的问题,但还没有找到答案。由于这是一个相当低级的问题,我希望SO社区能够提供帮助。安装了两个版本的mstsc.exe。C:\Windows\SysWOW64\mstsc.exe中的32位版本和C:\Windows\System32\mstsc.exe中的64位版本。我试着将版本从SysWOW64复制到我的开发机器上,并做了一个dumpbin/headers,确认它是32位的。你错了。OP的报告是正确的。发生的情况是,SysWOW64确实包含mstsc的32位版本,这是他正在运行的版本。但是,一旦运行32位mstsc,它就会启动64位mstsc(从System32)并自动关闭。使用ProcMon或其他工具可以很容易地观察到这一点。我不知道,也不知道如何防止这种奇怪的行为……(“你错了”当然是指受雇的俄罗斯人。我在没有注意到OP几分钟前评论的情况下写了评论)不,我没有错:原来的问题很混乱,我的回答中没有一句话是错误的。然而,正如您正确指出的,我建议安装32位mstsc.exe是没有帮助的,也不能解决问题。我很快会更新我的答案。谢谢你的回答(+1),你清楚地理解我的问题。我会让社区维基的问题变得更清晰。是的,我试过从32位XP复制这个版本。运行它会启动32位版本(*任务监视器中名称旁边的32),但会弹出一条错误消息:系统找不到指定的文件。C:\WinXP32\\mstsc.exe.MUI如果我复制这个.MUI文件的一个版本并再次运行,它会启动,但只剩下64位版本运行,这就是为什么我推荐您使用Windows 2000,因为Windows 2000没有64位版本,因此不会进行提升到64位检查。mstsc版本5.1(从XP pre SP3开始)和5.2(从server 2003开始)工作正常。版本6.0(来自XP SP3)启动64位进程。