System32和SysWOW64
生活随笔
收集整理的這篇文章主要介紹了
System32和SysWOW64
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
??????? 在64-bit的Windows系統(tǒng)中,System32和SysWOW64文件夾里都存在了大量的dll文件,那么到底哪一個是存放32-bit程序,哪一個是存放64-bit程序呢?想必很多人都有這個疑問。比如說管理odbc數(shù)據(jù)源的程序,可能分別在System32和SysWOW64文件夾里各有一個odbcad.exe和一個odbcad32.exe,那么到底哪一個是管理32-bit的數(shù)據(jù)庫驅(qū)動,哪一個是管理64-bit的驅(qū)動呢?
?????? 其實,只要知道WOW64這個名字的含義,我想這個問題就不難解決了。
“WOW64” 的意思是 “Windows On Windows64”
?????? 所以說在SysWOW64里并不是運行64-bit的程序,而是32-bit的程序。那么在64-bit系統(tǒng)下,64-bit的程序?qū)嶋H都裝在了System32文件夾下面。
關(guān)于什么要這么設(shè)置筆者找到一篇文章講得比較詳細,現(xiàn)粘貼如下http://hi.baidu.com/jasongp/item/0eab51499688320b6cc2f048
你看,這并不是什么大問題,畢竟,32位版本的不同Windows操作系統(tǒng)都用來同時運行32位和16位代碼。(技術(shù)上說,并不是同時運行,相關(guān)解釋在以后的技巧中會展示給大家)
32位版本的Windows在如何允許32為和16位代碼并肩運行方面有著很復(fù)雜的機制。然而,這個系統(tǒng)被設(shè)計成無論你是系統(tǒng)管理員還是臨時用戶,你都不需要知道這些機制如何運行。
但是64位版本的Windows就不同了。從一個用戶的立場上看,64位應(yīng)用程序和32位應(yīng)用程序簡單地同時運行,沒有什么特殊的。但是對于一個管理員(和幫助桌面用戶的人員)來說,這其中就有很大不同了:32位代碼與64位代碼相隔離。這個隔離是如此重要以至于64位版本的Windows有兩個注冊表,一個是針對64位,一個是針對32位。
盡管64位版本的Windows XP和Windows Server 2003看起來在操作時候和它們32位的版本幾乎同樣的,但是在表象之下其實是有很大不同的。如果你在64位版本的Windows下按照32位版本一樣來執(zhí)行某些程序,你可能引起一些麻煩。
DLL 存放到何處?
64位應(yīng)用程序的第一條規(guī)則是:你絕對不能把32位和64位代碼混和在同一個應(yīng)用程序內(nèi)。如果你有一個64位應(yīng)用程序,所有與這個應(yīng)用程序相關(guān)的東西,包括DLL文件,必須是64位的。這就有一個有趣的挑戰(zhàn),因為有時候很多應(yīng)用程序都依靠一個共同的DLL文件。幸運的是,Windows保持32位的DLL文件和64位的DLL文件處于隔離狀態(tài)。
如果你查看一下在32位操作系統(tǒng)內(nèi)的\Windows文件夾,你會發(fā)現(xiàn)兩個子目錄:一個名為SYSTEM,還有一個名為SYSTEM32。SYSTEM目錄是Windows 3.x遺留下來的,用來保持Windows的對一些舊的應(yīng)用程序的向下兼容性。一般說來,16位的DLL文件(以及其它的支持文件)被存放在\Windows\System文件夾里,32位DLL文件和不同支持文件被存放在\Windows\System32文件夾里。
32位版本的Windows保持16位和32位DLL文件的方式是非常簡單的,但是64位版本的Windows保持64位和32位DLL文件的方式就不這么簡單了。
? ? 理論上說,微軟將要創(chuàng)建一個名為\Windows\System64的文件夾來用其存放64位DLL文件,但是取而代之的是,微軟創(chuàng)建了一個新的名為SysWOW64的文件夾來存放32位的DLL文件。第一眼看起來,讓人感覺這個文件夾應(yīng)該存放64位應(yīng)用程序的,但是注意,32位應(yīng)用程序本來應(yīng)該存放它們的DLL文件到\Windows\System32文件夾里面。
\Windows\System32文件夾在64位版本的Windows內(nèi)仍然存在。但是微軟使用這個文件夾做為64位DLL的倉庫,而不是32位DLL文件的。我不清楚微軟使用\Windows\System32文件夾來存放64位DLL的原因,但是我聽說這么做是為了向下兼容性。
那么是不是所有32位應(yīng)用程序該存放它們的DLL文件到\Windows\System32文件夾呢?這又讓事情變得混亂。
如我之前所提及的,32位代碼不能默認在64位版本的Windows內(nèi)運行。為了運行32位的應(yīng)用程序,Windows使用WOW64 emulator,來讓這些應(yīng)用程序還認為它們在32位版本的Windows內(nèi)運行。
當(dāng)你安裝一個32位的應(yīng)用程序,安裝向?qū)ㄟ^WOW64 emulato運行。32位和64位代碼并不混和。一旦一個應(yīng)用程序(包括一個安裝向?qū)?從WOW64 emulator開始運行,它必須接著在WOW64內(nèi)繼續(xù)運行。這意味著當(dāng)你安裝一個應(yīng)用程序,安裝向?qū)Р⒉恢肋@個程序被安裝到64位版本的Windows內(nèi),并且和它運行在32位操作系統(tǒng)一樣把DLL文件寫到\Windows\System32文件夾里面。
當(dāng)然,WOW64知道安裝向?qū)ㄟ^emulator來運行的32位應(yīng)用程序。同時也知道64和32位代碼不能混合在一起。所以,WOW64 emulator 給\Windows\SysWOW64創(chuàng)建一個別名。這意味著任何時候32位應(yīng)用程序要寫入到\Windows\System32文件夾或者從\Windows\SysWOW64文件夾讀取,WOW64 emulator都能使其改道到\Windows\SysWOW64文件夾。
所有這些都意味著如果你需要手動操作\Windows\System32文件夾內(nèi)的內(nèi)容,你可能要非常的麻煩。我最近了解到一個管理員需要安裝一些小的支持腳本到一個已經(jīng)安裝的應(yīng)用程序,這個腳本的指導(dǎo)上說明這些腳本需要被存放到\Windows\System32文件夾。當(dāng)然這些腳本的說明假定這個應(yīng)用程序是在32位操作系統(tǒng)上運行的。
這些腳本沒有引起系統(tǒng)崩潰。然而Windows給人幻想永遠不用進行更新。當(dāng)管理員運行應(yīng)用程序,它將被改道到\Windows\SysWOW64文件夾。管理員知道他自己把這些腳本放到\Windows\System32文件夾并且能通過Windows瀏覽器看到這些腳本,但是不能指出為什么應(yīng)用程序不能看到這些腳本??紤]到這個問題是和權(quán)限相關(guān)的,他花費了一些時間來研究這個,所以知道了關(guān)于64位版本的Windows保存DLL文件隔離的方法,所以他能夠把這些腳本放到\Windows\SysWOW64文件夾。
64位版本的Windows對于一個管理員來說,了解底層系統(tǒng)結(jié)構(gòu)非常重要
總結(jié)
以上是生活随笔為你收集整理的System32和SysWOW64的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python文件读取方法read(siz
- 下一篇: 简单静态网页爬取