Windows 32 64 位系統存放Dll

有時候人們懷疑一個系統的底層結構可否保證這個系統在被使用時達到安全而高效,64位版本的Windows在這方面就比較完美。Windows XPWindows Server 2003都是運行64位硬件的64位版本操做系統。64Windows操做系統運行64位代碼,同時經過使用WoW64(Windows on Windows 64)也能運行32位代碼。
       
你看,這並非什麼大問題,畢竟,32位版本的不一樣Windows操做系統都用來同時運行32位和16位代碼。(技術上說,並非同時運行,相關解釋在之後的技巧中會展現給你們)
       32
位版本的Windows在如何容許32爲和16位代碼並肩運行方面有着很複雜的機制。然而,這個系統被設計成不管你是系統管理員仍是臨時用戶,你都不須要知道這些機制如何運行。
可是64位版本的Windows就不一樣了。從一個用戶的立場上看,64位應用程序和32位應用程序簡單地同時運行,沒有什麼特殊的。可是對於一個管理員(和幫助桌面用戶的人員)來講,這其中就有很大不一樣了:32位代碼與64位代碼相隔離。這個隔離是如此重要以致於64位版本的Windows有兩個註冊表,一個是針對64位,一個是針對32位。
儘管64位版本的Windows XPWindows Server 2003看起來在操做時候和它們32位的版本幾乎一樣的,可是在表象之下實際上是有很大不一樣的。若是你在64位版本的Windows下按照32位版本同樣來執行某些程序,你可能引發一些麻煩。
DLL
存放到何處?
64
位應用程序的第一條規則是:你絕對不能把32位和64位代碼混和在同一個應用程序內。若是你有一個64位應用程序,全部與這個應用程序相關的東西,包括DLL文件,必須是64位的。這就有一個有趣的挑戰,由於有時候不少應用程序都依靠一個共同的DLL文件。幸運的是,Windows保持32位的DLL文件和64位的DLL文件處於隔離狀態。
若是你查看一下在32位操做系統內的/Windows文件夾,你會發現兩個子目錄:一個名爲SYSTEM,還有一個名爲SYSTEM32SYSTEM目錄是Windows 3.x遺留下來的,用來保持Windows的對一些舊的應用程序的向下兼容性。通常說來,16位的DLL文件(以及其它的支持文件)被存放在/Windows/System文件夾裏,32DLL文件和不一樣支持文件被存放在/Windows/System32文件夾裏。
32
位版本的Windows保持16位和32DLL文件的方式是很是簡單的,可是64位版本的Windows保持64位和32DLL文件的方式就不這麼簡單了。
理論上說,微軟將要建立一個名爲/Windows/System64的文件夾來用其存放64DLL文件,可是取而代之的是,微軟建立了一個新的名爲SysWOW64的文件夾來存放32位的DLL文件。第一眼看起來,讓人感受這個文件夾應該存放64位應用程序的,可是注意,32位應用程序原本應該存放它們的DLL文件到/Windows/System32文件夾裏面。
/Windows/System32
文件夾在64位版本的Windows內仍然存在。可是微軟使用這個文件夾作爲64DLL的倉庫,而不是32DLL文件的。我不清楚微軟使用/Windows/System32文件夾來存放64DLL的緣由,可是我據說這麼作是爲了向下兼容性。
那麼是否是全部32位應用程序該存放它們的DLL文件到/Windows/System32文件夾呢?這又讓事情變得混亂。
如我以前所說起的,32位代碼不能默認在64位版本的Windows內運行。爲了運行32位的應用程序,Windows使用WOW64 emulator,來讓這些應用程序還認爲它們在32位版本的Windows內運行。
當你安裝一個32位的應用程序,安裝嚮導經過WOW64 emulato運行。32位和64位代碼並不混和。一旦一個應用程序(包括一個安裝嚮導)WOW64 emulator開始運行,它必須接着在WOW64內繼續運行。這意味着當你安裝一個應用程序,安裝嚮導並不知道這個程序被安裝到64位版本的Windows內,而且和它運行在32位操做系統同樣把DLL文件寫到/Windows/System32文件夾裏面。
固然,WOW64知道安裝嚮導經過emulator來運行的32位應用程序。同時也知道6432位代碼不能混合在一塊兒。因此,WOW64 emulator /Windows/SysWOW64建立一個別名。這意味着任什麼時候候32位應用程序要寫入到/Windows/System32文件夾或者從/Windows/SysWOW64文件夾讀取,WOW64 emulator都能使其改道到/Windows/SysWOW64文件夾。
全部這些都意味着若是你須要手動操做/Windows/System32文件夾內的內容,你可能要很是的麻煩。我最近了解到一個管理員須要安裝一些小的支持腳本到一個已經安裝的應用程序,這個腳本的指導上說明這些腳本須要被存放到/Windows/System32文件夾。固然這些腳本的說明假定這個應用程序是在32位操做系統上運行的。
這些腳本沒有引發系統崩潰。然而Windows給人幻想永遠不用進行更新。當管理員運行應用程序,它將被改道到/Windows/SysWOW64文件夾。管理員知道他本身把這些腳本放到/Windows/System32文件夾而且能經過Windows瀏覽器看到這些腳本,可是不能指出爲何應用程序不能看到這些腳本。考慮到這個問題是和權限相關的,他花費了一些時間來研究這個,因此知道了關於64位版本的Windows保存DLL文件隔離的方法,因此他可以把這些腳本放到/Windows/SysWOW64文件夾。
64
位版本的Windows對於一個管理員來講,瞭解底層系統結構很是重要。 瀏覽器

簡單點就是在64位系統下面,請將32DLL文件存放到/Windows/SysWOW64 文件夾中. 安全

相關文章
相關標籤/搜索