Запустить 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-битная хост-ОС.