从 32 位 shell 运行 64 位程序

从 32 位 shell 运行 64 位程序

我最近从 Cygwin 切换到 WSL,在 Sourcetree 和 commithooks 方面遇到了问题。

Sourcetree 使用其自己的 Cygwin 版本(32 位)来运行 git。我的开发环境在 WSL(仅 64 位)上运行。

因此,我想要做的是从 Sourcetrees Cygwin Bash 调用 WSL bash 并执行 commithook 检查。但这行不通,因为 Cygwin Bash 是一个 32 位程序,因此无法执行 WSL bash,它只有 64 位。因此 Cygwin Bash 将 WSL bash 视为不可执行文件。

有没有办法摆脱 Windows 10 上的 32 位沙盒来调用 64 位程序?

答案1

你在这里遇到的是WOW64 文件系统重定向。因为bash.exe住在64 位 System32目录,但 32 位程序会看到32 位 SysWOW64当他们要求时System32。这不是无法从 32 位运行 64 位的问题,而是无法寻找您首先尝试运行的可执行文件。

你确实有办法解决这个问题。引用该链接:

32 位应用程序可以通过将 %windir%\Sysnative 替换为 %windir%\System32 来访问本机系统目录。WOW64 将 Sysnative 识别为一个特殊别名,用于指示文件系统不应重定向访问。

sysnative因此只需通过:(%windir%\Sysnative\bash.exe或在 cygwin 内)调用显式路径$WINDIR/Sysnative/bash.exe

答案2

不,如果您的操作系统是 32 位,则不能直接使用,但如果您有 64 位处理器但安装了 32 位主机操作系统,则可以创建 64 位 VM 会话。

相关内容