¿Por qué java.exe no es visible desde cygwin, pero es visible desde el símbolo del sistema?

Respuestas:

14

En las ediciones x64 de Windows 8/7 / Vista, el contenido de la carpeta C: \ Windows \ System32 depende del bitness de la aplicación.

Para las aplicaciones de 64 bits (como el símbolo del sistema de Windows cmd.exe) , no hay redirección del sistema de archivos:
C:\Windows\System32(en el software) -> C:\Windows\System32(en el disco).
Entonces, la carpeta C: \ Windows \ System32 contiene archivos DLL y EXE de 64 bits, desde el punto de vista de la aplicación de 64 bits.

Para las aplicaciones de 32 bits (como las bash.exede Cygwin) que se ejecuta a través del subsistema WoW64 en Windows x64, hay dos redirecciones en el sistema de archivos:
C:\Windows\System32(en el software) -> C:\Windows\SysWOW64(en el disco).
C:\Windows\Sysnative(en software) -> C:\Windows\System32(en disco).
Entonces, la carpeta C: \ Windows \ System32 contiene archivos DLL y EXE de 32 bits, desde el punto de vista de la aplicación de 32 bits.

Si desea acceder a aplicaciones de 64 bits y archivos DLL (como java*.exe) desde aplicaciones de 32 bits (como Cygwin's bash.exe), debe usar la C:\Windows\Sysnativeruta o /cygdrive/c/Windows/Sysnativeen notación Cygwin.

(esta es una respuesta actualizada y extendida)

Mikhail Kupchik
fuente
Sí, están allí: Chloe @ xps / cygdrive / c / Windows / sysnative $ ls -la java * -rwx ------ + 1 SYSTEM SYSTEM 188320 7 de marzo 04:43 java.exe
Chloe
¿Porque hace eso? No puedo ver sysnative desde el indicador de DOS.
Chloe
2
Entonces, bash.exe de cygwin se ejecuta como una aplicación de 32 bits y en ese contexto C: \ Windows \ System32 se asigna a C: \ Windows \ SysWOW64 (una carpeta sin archivos java *). El símbolo del sistema de Windows (cmd.exe) se ejecuta como una aplicación de 64 bits y, por lo tanto, puede ver C: \ Windows \ System32 verdadero. Use C: \ Windows \ sysnative para acceder al verdadero directorio system32 desde aplicaciones de 32 bits. Más información sobre este tema: msdn.microsoft.com/en-us/library/windows/desktop/…
Mikhail Kupchik
¡Guau, eso es totalmente al revés y confuso!
Chloe
1
Sí, deberían haber creado el directorio \ Windows \ system64 para los archivos DLL y EXE del sistema de 64 bits, pero desafortunadamente tenemos archivos de 64 bits en el directorio System32 y una redirección de sistema de archivos incómoda.
Mikhail Kupchik