Запустить 64-битную программу из 32-битной оболочки

Недавно я перешел с Cygwin на WSL, и у меня возникли проблемы с Sourcetree и commithooks.

Sourcetree использует собственную версию Cygwin (32-битную) для запуска git. Моя среда разработки работает на WSL (которая только 64-битная).

Поэтому я хочу вызвать WSL bash из Sourcetrees Cygwin Bash и выполнить проверки commithook. Но это не работает, поскольку Cygwin Bash является 32-битной программой и, следовательно, не может выполнять WSL bash, которая является только 64-битной. Таким образом, Cygwin Bash рассматривает WSL bash как неисполняемый файл.

Есть ли способ вырваться из 32-битной песочницы в Windows 10 для вызова 64-битной программы?

2 ответа

Решение

Здесь вы столкнулись с перенаправлением файловой системы WOW64. Так как bash.exe живет в 64-битной System32 каталог, но 32-битные программы видят 32-битные SysWOW64 когда они просят System32, Дело не в том, что вы не можете запустить 64-битную версию из 32-битной, а скорее в том, что не можете найти исполняемый файл, который вы пытаетесь запустить в первую очередь.

У вас есть способ обойти это. Цитирую по этой ссылке:

32-разрядные приложения могут получить доступ к собственному системному каталогу, заменив%windir%\Sysnative на%windir%\System32. WOW64 распознает Sysnative как специальный псевдоним, используемый для указания того, что файловая система не должна перенаправлять доступ.

Так что просто вызовите явный путь через sysnative: %windir%\Sysnative\bash.exe (или же $WINDIR/Sysnative/bash.exe внутри Cygwin).

Нет, не напрямую, если ваша ОС 32-битная, но для этого вы можете провести сеанс 64-битной виртуальной машины, если у вас 64-битный процессор, но у вас установлена ​​32-битная хост-ОС.

Другие вопросы по тегам