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.