Por que o java.exe não é visível no cygwin, mas é visível no prompt de comando?

Respostas:

14

Nas edições x64 do Windows 8/7 / Vista, o conteúdo da pasta C: \ Windows \ System32 depende da aceitação do aplicativo.

Para aplicativos de 64 bits (como o Windows Command Prompt cmd.exe) , não há redirecionamento do sistema de arquivos:
C:\Windows\System32(no software) -> C:\Windows\System32(no disco).
Portanto, a pasta C: \ Windows \ System32 contém arquivos DLL e EXE de 64 bits, do ponto de vista do aplicativo de 64 bits.

Para aplicativos de 32 bits (como bash.exeCygwin), que são executados no subsistema WoW64 no Windows x64, existem dois redirecionamentos no sistema de arquivos:
C:\Windows\System32(no software) -> C:\Windows\SysWOW64(no disco).
C:\Windows\Sysnative(em software) -> C:\Windows\System32(em disco).
Portanto, a pasta C: \ Windows \ System32 contém arquivos DLL e EXE de 32 bits, do ponto de vista do aplicativo de 32 bits.

Se você deseja acessar aplicativos de 64 bits e arquivos DLL (como java*.exe) a partir de aplicativos de 32 bits (como o Cygwin bash.exe), precisará usar o C:\Windows\Sysnativecaminho ou a /cygdrive/c/Windows/Sysnativenotação Cygwin.

(esta é uma resposta atualizada e estendida)

Mikhail Kupchik
fonte
Sim, eles estão lá: Chloe @ xps / cygdrive / c / Windows / sysnative $ ls -la java * -rwx ------ + 1 SYSTEM SYSTEM 188320 7 de março 04:43 java.exe
Chloe
Por que ele faz isso? Não consigo ver o sysnative no prompt do DOS.
Chloe
2
Portanto, o bash.exe do cygwin é executado como um aplicativo de 32 bits e nesse contexto C: \ Windows \ System32 é mapeado para C: \ Windows \ SysWOW64 (uma pasta sem arquivos java *). O prompt de comando do Windows (cmd.exe) é executado como um aplicativo de 64 bits e, portanto, é possível ver o verdadeiro C: \ Windows \ System32. Use C: \ Windows \ sysnative para acessar o diretório system32 verdadeiro a partir de aplicativos de 32 bits. Mais informações sobre este tópico: msdn.microsoft.com/en-us/library/windows/desktop/...
Mikhail Kupchik
Uau, isso é totalmente ao contrário e confuso!
Chloe
1
Sim, eles deveriam ter criado o diretório \ Windows \ system64 para arquivos DLL e EXE do sistema de 64 bits, mas infelizmente temos arquivos de 64 bits no diretório System32 e redirecionamento estranho do sistema de arquivos.
Mikhail Kupchik 08/03/2013