通常,从命令行运行 32 位版本的 Windows 应用程序非常容易,例如运行窗口:
C:\Windows\SysWOW64\Notepad.exe
您可以通过检查任务监视器\进程来判断该进程是 32 位,因为文件名旁边会有 *32。
但是,远程桌面客户端 (mstsc.exe) 不想玩球。无论我如何启动它(运行窗口、32 位 cmd 窗口等),它总是从 C:\Windows\System32\mstsc.exe 运行 64 位版本。我甚至尝试编写一个 32 位 C++ 程序来创建它(通常子进程也是 32 位的),但这没有用。
我们需要运行 32 位版本,因为我们有一些与远程桌面集成的自定义 dll,并且无法在 64 位进程中加载 32 位 dll。
有人知道解决这个问题的方法吗?
答案1
我找到了一种解决这个问题的简单方法。
http://www.davidmoore.info/2009/12/02/running-32-bit-remote-desktop-connection-on-windows-64-bit/
解决方案:将 64 位 mstsc.exe 从 System32 重命名,以防止其替换 32 位进程。
如果您有权重命名该文件,则这很简单。如果您使用的是 NTFS,您可能会收到“您需要 TrustedInstaller 的权限才能更改此文件”错误。
为了解决此错误,您可以获取文件所有权并授予自己完全权限:
- 浏览到 %SystemRoot%\System32
- 右键单击 mstsc.exe 并选择属性
- 转到“安全”选项卡
- 单击“高级”
- 转至所有者选项卡
- 单击“编辑”
- 从“将所有者更改为:”列表中,选择您的用户名
- 单击“确定”
- 转到“权限”选项卡
- 单击更改权限…
- 单击“添加”
- 输入您的用户名并单击确定
- 勾选“允许”列中的“完全控制”框
- 单击“确定”
- 单击“确定”
- 将出现 Windows 安全警告;单击“是”继续
- 单击“确定”
现在,您可以将文件 mstsc.exe 重命名为 mstsc.exe.bak 之类的名称
然后,您可以从 %SystemRoot%\SysWOW64 启动 mstsc.exe,并且将运行 32 位远程桌面连接。
答案2
我发现强制 mstsc 在 32 位上运行的唯一方法是运行依赖项(来自 sysinternals),然后从 syswow64 打开 mstsc.exe。运行后使用开始分析保留选项为默认。这将导致 mstsc*32 位运行。目前我还没有找到其他方法来实现相同的效果。希望这对 Flavio 有帮助
答案3
64 位版本的 Windows 让人困惑,但 SysWOW64 目录中的内容是可在“WOW”(Windows 上的 Windows)中运行的 32 位可执行文件。System32 目录中的内容是 64 位二进制文件,没有 32 位等效文件。此处的命名是出于兼容性原因,虽然不太恰当,但我确信有些软件正是因为这样才能运行,否则就无法运行。
您可以尝试将 mstsc.exe 从 32 位安装复制到您的 64 位机器上并运行它,但据我所知,64 位 Windows 只有一个用于 mstsc 的 64 位 exe,因此不能强制在 32 位模式下运行。
答案4
您是否尝试过从现有的 32 位安装复制 32 位可执行文件并运行它?