當(dāng)我們遷至64位版本W(wǎng)indows系統(tǒng)后,就會(huì)發(fā)現(xiàn)此時(shí)有兩個(gè)獨(dú)立的 Program Files文件夾,從直覺上這并不難理解;而且發(fā)現(xiàn)此時(shí)還有兩個(gè)獨(dú)立的存放可執(zhí)行文件和DLL庫的系統(tǒng)文件夾,它們分別是System32與 SysWOW64,但是System32中放的是64位文件,而SysWOW64放的竟然是32位文件!這真是匪夷所思啊!
我們早都知道,System32目錄中存放著Windows系統(tǒng)文件,包括程序調(diào)用的DLL庫文件以及我們在Windows常常會(huì)用到各種命令工具的.EXE文件,當(dāng)然還包括一些第三方程序軟件及其DLL文件。用戶自行安裝的應(yīng)用程序主要是在Program Files文件夾,而這些應(yīng)用通常是將系統(tǒng)級(jí)庫文件存于System32文件夾。
在64位版本W(wǎng)indows中,會(huì)用文件夾“C:Program Files”存放64位的程序文件,而用“C:Program Files(x86)”文件夾存放32位程序文件,這并不難理解,因?yàn)?4位的程序需要調(diào)用64位的DLL文件,而32位程序需要調(diào)用32位DLL文件。否則就會(huì)讓程序無法運(yùn)行。
但并非所有DLL文件都會(huì)放進(jìn)Program Files。不僅Windows本身會(huì)將自己的系統(tǒng)庫放入“C:System32”,而且另外安裝的一些程序也會(huì)將庫文件駐留此處,所以這就要求Windows像分離32位與64位的Program Files文件夾那樣,也需要有能夠分離32位與64位的System32文件夾。
在以往傳統(tǒng)的32位機(jī)器上,所有32位程序都將其文件存放在“C:Program Files”,系 統(tǒng) 庫 則 放 入“C:System32”。而在現(xiàn)代64位機(jī)上,64位程序則將其文件存放在“C:Program Files”,其64位庫文件則放入“?C:WindowsSystem32”;32位程序會(huì)將其文件存入“C:Program Files (x86)”,其32位庫文件則會(huì)放入文件夾“C: WindowsSysWOW64”之中。這聽起來非常矛盾,但是從Windows系統(tǒng)看并無大礙,因?yàn)樾枰脩糇约哼x擇路徑去存放DLL文件的情形非常罕見。
其實(shí) “WOW64”名稱或許就暗示在Windows 64-bit之上的Windows 32-bit軟件。例如,當(dāng)用戶在64位Windows系統(tǒng)上安裝32位程序時(shí),該程序會(huì)習(xí)慣性地寫入C:Program Files文件夾,此時(shí)64位Windows系統(tǒng)的文件系統(tǒng)重定向機(jī)制會(huì)讓W(xué)oW64將其引向“C:Program Files (x86)”,然后當(dāng)它想要尋訪“C:WindowsSystem32”文件夾時(shí),WoW64則會(huì)帶它進(jìn)入“C:WindowsSysWOW64”。
那么為何造成System32存64位,SysWOW64存32位這種“錯(cuò)置”現(xiàn)象的發(fā)生呢?有業(yè)內(nèi)分析家表示,其原因大概是目前主流中堅(jiān)的32位出身的程序員都習(xí)慣存放“C: WindowsSystem32”,這幾乎已成為代碼編寫的一條鐵律,要迫使開發(fā)人員改變這一貌似不講理的習(xí)慣,恐會(huì)讓很多項(xiàng)目擱淺,所以微軟就在64位系統(tǒng)添加了WoW64夾層,這樣用戶和程序員兩邊都不得罪。