【问题标题】:How can I force the 32-bit version of the remote desktop client to run on 64 bit Vista?如何强制 32 位版本的远程桌面客户端在 64 位 Vista 上运行?
【发布时间】:2009-06-16 19:33:24
【问题描述】:

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

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

C:\Windows\SysWOW64\Notepad.exe

您可以通过检查任务监视器\进程来判断该进程是 32 位的,因为它的文件名旁边会有一个 *32。

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

我也试过打电话:

Wow64DisableWow64FsRedirection
Wow64RevertWow64FsRedirection

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

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

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

【问题讨论】:

  • 这可能属于 serverfault.com
  • 我问了关于serverfault的问题,但还没有找到答案。由于这是一个相当低级的问题,我希望 SO 社区能够提供帮助。

标签: c++ 64-bit remote-desktop vista64


【解决方案1】:

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

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

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

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

(1) Microsoft 通过将许多可执行文件作为 32 位和 64 位版本发布,并神奇地重新映射 PATH 以便找到其中一个,极大地帮助了这种混淆;通常在显然相同的路径名。但这只是“雾里看花”,实际上路径名总是不同的。

【讨论】:

  • 安装了两个版本的 mstsc.exe。 C:\Windows\SysWOW64\mstsc.exe 中的 32 位版本和 C:\Windows\System32\mstsc.exe 中的 64 位版本。我尝试将版本从 SysWOW64 复制到我的开发机器并做了一个 dumpbin /headers 并确认它是 32 位的。
  • 你错了。 OP的报告是正确的。发生的情况是 SysWOW64 确实包含 32 位版本的 mstsc,这是他正在运行的那个。但是,一旦运行 32 位 mstsc,就会启动 64 位 mstsc(来自 System32)并自行关闭。使用 ProcMon 左右可以很容易地观察到这一点。为什么它会以我不知道的方式工作,我也不知道如何防止这种奇怪的行为......
  • (“你错了”当然是指受雇的俄罗斯人。我写了评论而没有注意到 OP 在几分钟前发表了评论)
  • 不,我没有错:原来的问题是混淆了,我的回答中没有一个陈述是不正确的。但是,正如您正确指出的那样,我安装 32 位 mstsc.exe 的建议没有帮助,也不能解决问题。我会尽快更新我的答案。
  • 感谢使用俄语 (+1) 的回答,您清楚地了解我遇到的问题。我将把问题社区 wiki 放在一起,所以请随时澄清它。
【解决方案2】:
【解决方案3】:

您是否尝试过旧版本(例如,从 Windows 2000 开始)?

【讨论】:

  • 是的,我尝试过从 32 位 XP 复制该版本。运行它会启动 32 位版本(任务监视器中名称旁边的 *32)但会弹出错误消息:系统找不到指定的文件。 C:\WinXP32\\mstsc.exe.MUI 如果我复制这个 .MUI 文件的一个版本并再次运行,它会启动,但它只留下 64 位版本运行
  • 这就是为什么我将您推荐给 Windows 2000,因为它没有 64 位版本,因此不会进行升级到 64 位检查。
  • MSTSC 版本 5.1(来自 XP pre SP3)和 5.2(来自服务器 2003)工作正常。 6.0 版(从 XP SP3 开始)启动 64 位进程。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 2013-05-08
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多