通常从命令行运行 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 位的),但这不起作用。
我们需要运行 32 位版本,因为我们有一些与远程桌面集成的自定义 dll,并且无法在 64 位进程中加载 32 位 dll。
有人知道解决这个问题的方法吗?
我找到了一个简单的方法来解决这个问题。
http://www.davidmoore.info/2009/12/02/running-32-bit-remote-desktop-connection-on-windows-64-bit/
解决方法:将 64 位的 mstsc.exe 从 System32 重命名,以防止其替换 32 位进程。
如果您有权重命名该文件,这很简单。如果您使用的是 NTFS,您可能会收到“您需要 TrustedInstaller 的许可才能更改此文件”错误。
要解决此错误,您可以获取文件的所有权并赋予自己完全权限:
现在,您可以将文件 mstsc.exe 重命名为 mstsc.exe.bak
然后,您可以从 %SystemRoot%\SysWOW64 启动 mstsc.exe,您将运行 32 位远程桌面连接。
我发现强制 mstsc 以 32 位运行的唯一方法是运行依赖项(来自 sysinternals),而不是从 syswow64 打开 mstsc.exe。使用启动分析运行它后,将选项保留为默认值。这将导致 mstsc*32 位运行。目前我还没有找到任何其他方法。锄头这帮助弗拉维奥
这对 64 位版本的 Windows 感到困惑,但位于 SysWOW64 目录中的东西是在“WOW”(Windows 上的 Windows)中运行的 32 位可执行文件。System32 目录中的东西是 64 位二进制文件,没有 32 位等价物。这里的命名是出于兼容性原因并且是蹩脚的,但我确信某些软件可以正常工作,因为它否则将无法正常工作。
您可以尝试将 mstsc.exe 从 32 位安装复制到您的 64 位机器上并运行它,但据我所知,64 位 Windows 只有一个用于 mstsc 的 64 位 exe,因此不能强制在 32 位模式下运行。
使用以下脚本作为 .bat 文件,强制启动 mstsc.exe x32。
您是否尝试过从现有的 32 位安装复制 32 位可执行文件并运行它?
您是否尝试过兼容模式,尝试过旧操作系统?我认为系统会查看可执行文件的清单,如果它是为 Vista 开发的,那么它不会显示该选项卡。但我认为您可以编辑清单。
我的回答是: 有32 位版本的 mstsc.exe 吗?我假设 64 位 Windows 附带的 mstsc 是 mstsc 的 64 位版本。
真正的答案是:如果您想为 64 位应用程序编写 dll 扩展,您必须将您的 dll 重新编译为 64 位。Microsoft 没有也不应该有义务为每个操作系统组件提供 32 位版本。
另一个例子:如果你想为 64 位 Windows Explorer 编写一个 shell 扩展,它必须是一个 64 位的 dll。没有 32 位版本的 Windows 资源管理器。您要么支持 64 位 Windows,要么不支持。