Mengapa java.exe tidak terlihat dari cygwin, tetapi terlihat dari command-prompt?


Jawaban:


14

Dalam edisi x64 Windows 8/7 / Vista, isi folder C: \ Windows \ System32 tergantung pada bitness aplikasi.

Untuk aplikasi 64-bit (seperti Windows Command Prompt, cmd.exe) , tidak ada pengalihan sistem file:
C:\Windows\System32(dalam perangkat lunak) -> C:\Windows\System32(pada disk).
Jadi, folder C: \ Windows \ System32 berisi file DLL dan EXE 64-bit, dari sudut pandang aplikasi 64-bit.

Untuk aplikasi 32-bit (seperti bash.exedari Cygwin) yang berjalan melalui subsistem WoW64 pada Windows x64, ada dua pengalihan dalam sistem file:
C:\Windows\System32(dalam perangkat lunak) -> C:\Windows\SysWOW64(pada disk).
C:\Windows\Sysnative(dalam perangkat lunak) -> C:\Windows\System32(pada disk).
Jadi, folder C: \ Windows \ System32 berisi file DLL dan EXE 32-bit, dari sudut pandang aplikasi 32-bit.

Jika Anda ingin mengakses aplikasi 64-bit dan file DLL (seperti java*.exe) dari aplikasi 32-bit (seperti Cygwin bash.exe), Anda perlu menggunakan C:\Windows\Sysnativejalur, atau /cygdrive/c/Windows/Sysnativedalam notasi Cygwin.

(ini adalah jawaban yang diperbarui dan diperluas)


Ya, mereka ada di sana: Chloe @ xps / cygdrive / c / Windows / sysnative $ ls -la java * -rwx ------ + 1 SYSTEM SYSTEM 188320 7 Maret 7 04:43 java.exe
Chloe

Kenapa bisa begitu? Saya tidak dapat melihat sysnative dari DOS prompt.
Chloe

2
Jadi, bash.exe cygwin berjalan sebagai aplikasi 32-bit dan dalam konteks itu C: \ Windows \ System32 dipetakan ke C: \ Windows \ SysWOW64 (folder tanpa file java *). Prompt perintah Windows (cmd.exe) berjalan sebagai aplikasi 64-bit sehingga ia dapat melihat true C: \ Windows \ System32. Gunakan C: \ Windows \ sysnative untuk mengakses direktori system32 sebenarnya dari aplikasi 32-bit. Informasi lebih lanjut tentang topik ini: msdn.microsoft.com/en-us/library/windows/desktop/…
Mikhail Kupchik

Wow itu benar-benar mundur dan membingungkan!
Chloe

1
Ya, mereka seharusnya membuat direktori \ Windows \ system64 untuk file DLL dan EXE sistem 64-bit, tetapi sayangnya kami memiliki file 64-bit di direktori System32 dan pengalihan sistem file yang canggung.
Mikhail Kupchik
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.