Почему java.exe не виден из cygwin, но виден из командной строки?

Ответы:

14

В 64-разрядных выпусках Windows 8/7 / Vista содержимое папки C: \ Windows \ System32 зависит от разрядности приложения.

Для 64-разрядных приложений (таких как командная строка Windows cmd.exe) перенаправление файловой системы отсутствует:
C:\Windows\System32(в программном обеспечении) -> C:\Windows\System32(на диске).
Таким образом, папка C: \ Windows \ System32 содержит 64-битные файлы DLL и EXE с точки зрения 64-битного приложения.

Для 32-разрядных приложений (таких как bash.exeCygwin), которые работают через подсистему WoW64 в Windows x64, в файловой системе существует два перенаправления:
C:\Windows\System32(в программном обеспечении) -> C:\Windows\SysWOW64(на диске).
C:\Windows\Sysnative(в программном обеспечении) -> C:\Windows\System32(на диске).
Таким образом, папка C: \ Windows \ System32 содержит 32-битные файлы DLL и EXE с точки зрения 32-битного приложения.

Если вы хотите получить доступ к 64-битным приложениям и файлам DLL (таким как java*.exe) из 32-битных приложений (таких как Cygwin's bash.exe), вам нужно использовать C:\Windows\Sysnativeпуть или /cygdrive/c/Windows/Sysnativeв нотации Cygwin.

(это обновленный и расширенный ответ)

Михаил Купчик
источник
Да, они есть: Chloe @ xps / cygdrive / c / Windows / sysnative $ ls -la java * -rwx ------ + 1 СИСТЕМНАЯ СИСТЕМА 188320 7 марта 04:43 java.exe
Хлоя
Почему это так? Я не вижу sysnative из командной строки DOS.
Хлоя
2
Итак, cygwin's bash.exe работает как 32-разрядное приложение, и в этом контексте C: \ Windows \ System32 сопоставляется с C: \ Windows \ SysWOW64 (папка без файлов java *). Командная строка Windows (cmd.exe) работает как 64-разрядное приложение, поэтому она может видеть истинное C: \ Windows \ System32. Используйте C: \ Windows \ sysnative для доступа к истинному каталогу system32 из 32-разрядных приложений. Дополнительная информация по этой теме: msdn.microsoft.com/en-us/library/windows/desktop/…
Михаил Купчик
Вау, это совершенно задом наперед и запутанно!
Хлоя
1
Да, они должны были сделать каталог \ Windows \ system64 для 64-битных системных DLL и EXE-файлов, но, к сожалению, у нас есть 64-битные файлы в каталоге System32 и неудобное перенаправление файловой системы.
Михаил Купчик