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