Why is java.exe not visible from cygwin, but is visible from command-prompt?
In x64 editions of Windows 8/7/Vista, contents of C:\Windows\System32 folder depend on the bitness of the application .
For 64-bit applications (such as Windows Command Prompt, cmd.exe
) there's no filesystem redirection:C:\Windows\System32
(in software) -> C:\Windows\System32
(on disk).
So, C:\Windows\System32 folder contains 64-bit DLL and EXE files, from the point-of-view of 64-bit application.
For 32-bit applications (such as bash.exe
from Cygwin) which runs via WoW64 subsystem on Windows x64, there are two redirections in the filesystem:C:\Windows\System32
(in software) -> C:\Windows\SysWOW64
(on disk).C:\Windows\Sysnative
(in software) -> C:\Windows\System32
(on disk).
So, C:\Windows\System32 folder contains 32-bit DLL and EXE files, from the point-of-view of 32-bit application.
If you want to access 64-bit applications and DLL files (such as java*.exe
) from 32-bit applications (such as Cygwin's bash.exe
), you need to use C:\Windows\Sysnative
path, or /cygdrive/c/Windows/Sysnative
in Cygwin notation.
(this is an updated and extended answer)