DllCache恢復(fù)原理
由于DllCache目錄中存儲有系統(tǒng)文件的備份,總體積大概在200~400M,這給我們封裝系統(tǒng)后控制系統(tǒng)映像體積方面制造了障礙,那我們能不能刪掉它,并在系統(tǒng)部署時恢復(fù)它?為了解決這個問題,“DllCache恢復(fù)”應(yīng)運(yùn)而生。
1、傳統(tǒng)DllCache恢復(fù)
前文已述,DllCache存儲的是系統(tǒng)文件備份,那么這些系統(tǒng)文件肯定同時也是存在于系統(tǒng)目錄中的,這就給了我們一個思路。我們恢復(fù)DllCache文件,源文件可以去當(dāng)前系統(tǒng)尋找,而我們要去尋找哪些文件呢?這就需要我們在清空DllCache目錄前記錄一下這個目錄里有哪些文件就可以了。我舉例簡單的說明一下:
(1)例如目前DllCache目錄里有:a.sys、b.sys、c.dll三個文件,封裝時清空DllCache目錄前運(yùn)行一個小程序,將這三個文件的名字記錄下來,如記錄在一個文本文件里。這個過程即所謂的“DllCache備份”。
(2)系統(tǒng)部署時的一個時機(jī)(常用系統(tǒng)部署中,注冊組件時),DllCache恢復(fù)程序啟動,讀。1)過程中用于記錄DllCache目錄下文件的文本文件,而后去系統(tǒng)目錄尋找這些文件,再將找到的文件復(fù)制到DllCache目錄。
簡而言之,在傳統(tǒng)DllCache恢復(fù)中,“DllCache備份”就是記錄DllCache目錄下有哪些文件,“DllCache恢復(fù)”就是按照記錄將系統(tǒng)文件從系統(tǒng)目錄復(fù)制到DllCache目錄下。
2、新型DllCache恢復(fù)
這個功能的實現(xiàn)感謝天空曾經(jīng)的編程大師:七貓(由于工作原因,現(xiàn)已退役)
由于傳統(tǒng)的DllCache恢復(fù)必須執(zhí)行“備份-->恢復(fù)”的過程,比較繁瑣,萬一忘記了執(zhí)行備份過程,那恢復(fù)過程就是徒勞。七貓?zhí)岢隽瞬煌乃悸,如果能夠讀取系統(tǒng)函數(shù),直接詢問SFC它需要將哪些文件備份到DllCache目錄,而后將SFC需要的文件全部復(fù)制到DllCache目錄,這不是更好嗎?這樣就根本不需要“備份”過程,而且我們“恢復(fù)”出來的文件是SFC所需要的所有的文件。由于系統(tǒng)不同,精簡的內(nèi)容不同,甚至安裝的驅(qū)動不同,都會造成SFC所需要備份的文件不完全一致,這種詢問SFC需求并將需求實現(xiàn)的功能無疑是更加強(qiáng)大且更加完善的!
自由天空DllCacheRecover系列使用的即是七貓的實時詢問系統(tǒng)需求并復(fù)制文件的原理。無需傳統(tǒng)的DllCache備份過程,DllCacheRecover運(yùn)行時會實時的詢問SFC,并將需要的文件自動搜索與復(fù)制到DllCache目錄。某些系統(tǒng)可能要恢復(fù)2000~2500個文件,而某些系統(tǒng)只需要恢復(fù)1500~2000個文件,DllCacheRecover都能夠根據(jù)實際需要進(jìn)行復(fù)制,精確度高,更貼近系統(tǒng)需求,不因額外的文件復(fù)制增加時間的消耗。
SFC與DllCache