Чому java.exe не видно з cygwin, але видно з командного рядка?


Відповіді:


14

У x64 виданнях Windows 8/7 / Vista вміст папки C: \ Windows \ System32 залежить від розрядності програми.

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

Для 32-розрядних додатків (наприклад, bash.exeвід Cygwin), які працюють через підсистему 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
Хлоя

Чому це робиться? Я не можу побачити систематизацію з підказки DOS.
Хлоя

2
Отже, bash.exe cygwin працює як 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, але, на жаль, у каталозі System32 є 64-бітні файли та незручне перенаправлення файлової системи.
Михайло Купчик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.