Saya ingin tahu kapan kita perlu meletakkan file di bawah
C: \ Windows \ System32 atau C: \ Windows \ SysWOW64, pada sistem windows 64-bit.
Saya punya dua DLL, satu untuk 32-bit, satu untuk 64-bit.
Secara logis, saya pikir saya akan menempatkan DLL 32-bit di bawah C: \ Windows \ System32, dan DLL 64-bit di bawah C: \ Windows \ SysWOW64.
Yang mengejutkan saya, itu sebaliknya ! Yang 32- bit masuk ke C: \ Windows \ SysWOW 64 , dan DLL 64- bit masuk ke C: \ Windows \ System 32 .
Hal yang sangat membingungkan. Apa alasan di balik ini?
dll
32bit-64bit
system32
syswow64
Ganesh Astroved
sumber
sumber
Jawaban:
Saya percaya maksudnya adalah untuk mengubah nama System32, tetapi begitu banyak aplikasi yang dikodekan untuk jalur itu, sehingga tidak layak untuk menghapusnya.
SysWoW64 tidak dimaksudkan untuk dll dari sistem 64-bit, itu sebenarnya sesuatu seperti "Windows on Windows64", yang berarti bit yang Anda butuhkan untuk menjalankan aplikasi 32bit pada windows 64bit.
Artikel ini sedikit menjelaskan:
"Windows x64 memiliki System32 direktori yang berisi 64-bit DLL (sic!). Dengan demikian proses asli dengan bitness 64 menemukan DLL" mereka "di mana mereka mengharapkannya: dalam folder System32. Direktori kedua, SysWOW64, berisi 32 -bit DLL. Redirector sistem file melakukan keajaiban menyembunyikan direktori System32 nyata untuk proses 32-bit dan menunjukkan SysWOW64 dengan nama System32. "
Sunting: Jika Anda berbicara tentang penginstal, Anda seharusnya tidak membuat hard-path path ke folder sistem. Sebagai gantinya, biarkan Windows yang menanganinya untuk Anda berdasarkan apakah installer Anda berjalan pada lapisan emulasi atau tidak.
sumber
SysWOW64
folder, mengapa mereka tidak dapat mendeteksi aplikasi 64 bit dan mengalihkan keSystem64
?!Saya harus menambahkan: Anda tidak harus menempatkan dll Anda ke \ system32 \ toh! Ubah kode Anda, modifikasi pemasang Anda ... temukan rumah untuk bit Anda yang TIDAK berada di bawah c: \ windows \
Sebagai contoh, installer Anda menempatkan dll Anda ke:
( Catatan : Cara Anda benar-benar melakukan ini adalah dengan menggunakan lingkungan var:% ProgramFiles% atau% ProgramFiles (x86)% untuk menemukan di mana File Program .... Anda tidak menganggap itu c: \ program file \ .. ..)
dan kemudian menetapkan tag registri:
Kode yang menggunakan dll Anda membaca registri, lalu secara dinamis menautkan ke dll di lokasi itu.
Di atas adalah cara cerdas untuk melakukannya.
Anda tidak pernah menginstal dll, atau pihak ketiga dll ke \ system32 \ atau \ syswow64. Jika Anda harus memuat secara statis, Anda meletakkan dll Anda di dir exe Anda (di mana mereka akan ditemukan). Jika Anda tidak dapat memprediksi dir exe (mis. Exe lain akan memanggil dll Anda), Anda mungkin harus meletakkan dir dll Anda ke jalur pencarian (hindari ini jika sama sekali poss!)
system32 dan syswow64 untuk file yang disediakan Windows ... bukan untuk siapa pun file lain . Satu-satunya alasan orang memiliki kebiasaan buruk menaruh barang di sana adalah karena selalu ada di jalur pencarian, dan banyak aplikasi / modul menggunakan tautan statis. (Jadi, jika Anda benar-benar melakukannya, dosa sebenarnya adalah tautan statis - ini adalah dosa dalam kode asli dan kode terkelola - selalu selalu selalu terhubung secara dinamis!)
sumber
Mengalami masalah yang sama dan meneliti ini selama beberapa menit.
Saya diajari menggunakan Windows 3.1 dan DOS, ingat masa itu? Tidak lama setelah saya bekerja dengan komputer Macintosh secara ketat selama beberapa waktu, kemudian mulai bergoyang kembali ke Windows setelah membeli mesin x64-bit.
Ada alasan aktual di balik perubahan ini (beberapa akan mengatakan signifikansi historis), yang penting bagi programmer untuk melanjutkan pekerjaan mereka.
Sebagian besar perubahan disebutkan di atas:
Program Files
vs.Program Files (x86)
Pada awalnya file 16 / 86bit ditulis, prosesor Intel '86'.
System32
sangat berartiSystem64
(pada Windows 64-bit)Ketika pengembang pertama kali mulai bekerja dengan Windows7, ada beberapa masalah kompatibilitas di mana aplikasi lain disimpan.
SysWOW64
sangat berartiSysWOW32
Pada dasarnya, dalam bahasa Inggris yang sederhana, ini berarti 'Windows pada Windows dalam mesin 64-bit' . Setiap folder menunjukkan di mana DLL berada untuk aplikasi yang ingin mereka gunakan.
Berikut adalah dua tautan dengan semua info dasar yang Anda butuhkan:
Pengarah Sistem File MSDN
SysWow64 Dijelaskan
Semoga ini beres!
sumber
System32 adalah tempat Windows secara historis menempatkan semua DLL 32bit, dan System adalah untuk DLL 16bit. Ketika microsoft menciptakan OS 64 bit, semua orang yang saya tahu diharapkan file berada di bawah System64, tetapi Microsoft memutuskan lebih masuk akal untuk meletakkan file 64bit di bawah System32. Satu-satunya alasan saya dapat menemukan, adalah bahwa mereka menginginkan semua yang 32bit bekerja di Windows 64bit tanpa harus mengubah apa pun dalam program - hanya mengkompilasi ulang, dan itu dilakukan. Cara mereka memecahkan ini, sehingga aplikasi 32bit masih dapat berjalan, adalah dengan membuat subsistem windows 32bit yang disebut Windows32 Pada Windows64. Dengan demikian, akronim SysWOW64 diciptakan untuk direktori Sistem subsistem 32bit. Sys adalah kependekan dari System, dan WOW64 adalah kependekan dari Windows32OnWindows64.
Karena windows 16 sudah dipisahkan dari Windows 32, maka tidak perlu untuk kesetaraan Windows 16 Pada Windows 64. Di dalam subsistem 32bit, ketika sebuah program menggunakan file dari direktori system32, mereka sebenarnya mendapatkan file dari direktori SysWOW64. Namun prosesnya cacat.
Ini desain yang mengerikan. Dan dalam pengalaman saya, saya harus melakukan lebih banyak perubahan untuk menulis aplikasi 64bit, yang hanya mengubah direktori System32 untuk membaca System64 akan menjadi perubahan yang sangat kecil, dan salah satu yang akan ditangani oleh arahan pra-kompiler.
sumber
Orang lain telah melakukan pekerjaan yang baik untuk menjelaskan teka-teki ridiculus ini ... dan saya pikir Chris Hoffman melakukan pekerjaan yang lebih baik di sini: https://www.howtogeek.com/326509/whats-the-difference-between-the- system32-and-syswow64-folder-in-windows /
Dua pemikiran saya:
Kita semua membuat kesalahan bodoh dalam hidup. Ketika Microsoft menamai direktori Win32 DLL (System32 ") pada saat itu, masuk akal pada saat itu ... mereka tidak mempertimbangkan apa yang akan terjadi jika / ketika versi 64-bit (atau 128-bit) OS mereka dikembangkan kemudian - dan masalah kompatibilitas mundur besar-besaran seperti nama direktori akan menyebabkan. Hindsight selalu 20-20, jadi saya tidak bisa menyalahkan mereka (terlalu banyak) untuk kesalahan seperti itu. ... NAMUN ... Ketika Microsoft kemudian mengembangkan sistem operasi 64-bit mereka, bahkan dengan manfaat melihat ke belakang, mengapa oh mengapa mereka membuat tidak hanya kesalahan berpandangan pendek yang sama LAGI tetapi membuatnya lebih buruk dengan TUJUAN memberikan secara penuh itu nama yang menyesatkan?!? Malu pada mereka!!! Mengapa TIDAK SETIDAKNYA sebenarnya menamai direktori "SysWin32OnWin64" untuk menghindari kebingungan ?! ? Dan apa yang terjadi ketika mereka akhirnya menghasilkan OS 128-bit ... lalu di mana mereka akan meletakkan DLL 32-bit, 64-bit, dan 128-bit?!?
Semua logika ini tampaknya masih benar-benar cacat bagi saya. Pada Windows versi 32-bit, System32 berisi DLL 32-bit; pada Windows versi 64-bit, System32 mengandung DLL 64-bit ... sehingga pengembang tidak perlu membuat perubahan kode, benar? Masalah dengan logika ini adalah bahwa para pengembang sekarang membuat aplikasi 64-bit yang membutuhkan DLL 64-bit atau mereka membuat aplikasi 32-bit yang membutuhkan DLL 32-bit ... bagaimanapun juga, bukankah mereka masih kacau? Maksud saya, jika mereka masih membuat aplikasi 32-bit, untuk itu sekarang dapat berjalan di Windows 64-bit, mereka sekarang harus membuat perubahan kode untuk menemukan / referensi DLL 32-bit yang sama mereka digunakan sebelumnya (sekarang terletak di SysWOW64). Atau, jika mereka bekerja pada aplikasi 64-bit, mereka harus menulis ulang aplikasi lama mereka untuk OS baru ... jadi rekompilasi / pembangunan kembali akan tetap diperlukan !!
Microsoft terkadang menyakitiku.
sumber