[技術] C:\Windows\Installer越來越大?讓我們一起來刪除msp這個毒瘤
本帖最后由 zifeityzyicq 於 2013-11-20 12:05 編輯 你有沒有發現C:\Windows\Installer這個文件夾下有很多msp文件,當然前提是你安裝有Office等軟件,而且安裝了最新的補丁。 msp是一個二進制補丁文件,按照道理在安裝更新后就就可以刪除了,但是真的可以直接刪除么?我們一起通過解包msi來得到答案。 溫馨提示:本文給跟我一樣的強迫症患者觀看,如果你覺得你的系統盤有N個TB,完全不需要清理,那么請你離開,安安靜靜的看別的帖子,謝謝配合~~ msp文件占據了C:\Windows\Installer 目錄很大的空間,但是。。。他們是不能直接刪除的,直接刪除那你就悲劇了,日后肯定N多更新無法安裝 但是天無絕人之路,方法還是有的!可以實現徹底刪除msp文件,而且不影響你安裝以后的Office NET等補丁(溫馨提示,刪除后你將無法卸載對應的更新) 原理詳解 一個可靠的方案必然有實現的原理,完成這個實驗你需要准備一具”屍體“(一個msi文件),還有二把手術刀(7zip與ContextConsole Shell Extension) 7zip 我想不解釋了,是世界上最強大的壓縮軟件之一,也是本人的最愛,大家應該也聽說過 ContextConsole Shell Extension 基於Installer SDK開發的msi編輯工具,有了它我們就可以看到更多msi文件的內部信息 ContextConsole Shell Extension 打開一個msi文件轉到Tables 的Binary <ignore_js_op> ![]() UpdateInfo以及UnblockAll了么?他們是安裝更新的關鍵所在! 用7zip打開對應的msi文件,找到Binary.UpdatesInfo然后解壓出來,並且改名成UpdatesInfo.vbs 然后用記事本打開這個vbs文件 <ignore_js_op> ![]() 在這里有一條非常重要的信息
他的意思是如果 OldUpdsExists 為邏輯真 那么 ********************* 看OldUpdsExists 的名字,我們可以猜測,他是判斷舊的更新存在 的一個布爾值 OK,我們再來看看OldUpdsExists 到底是什么! 我們可以發現上一句
CheckIfKeyExists,意思其實很明白,檢查對應的注冊表是否存在!!而參數就是一個注冊表路徑 接下來我們來確定 HKCRProKey 以及 ProduciCode 這二個變量是什么,我可以可以猜測到他應該是注冊表的路徑 來吧在往上看就有了
這下我們明白了吧,他其實就是表示HKLM\SOFTWARE\Classed\Installer\Products\DC3BF90CC0D3D2F398A9A6D1762F70F3\Patches\Patches 這個注冊表路徑是否存在 而他存在的時候,就會進行一系列的驗證操作,如果我們我們手動他這個注冊表刪除,然后再把msp文件刪除,那是不是就可以跳過驗證,立馬進入更新安裝了? OK,我們來編寫一段程序,來實現我們的操作(這種繁瑣的事情自然交給程序去完成) 把所有的這樣注冊表刪除 HKLM\SOFTWARE\Classes\Installer\Products\**********\Patches 然后再刪除msp文件 C++實現代碼
一起來做個測試吧,安裝5個Office更新,對比直接刪除msp文件與刪除注冊表后再刪除msp文件的區別 <ignore_js_op> ![]() OK,我們可以看到Office更新有33個,我們選擇前5個 <ignore_js_op> ![]() 下載完成,一共45MB更新 <ignore_js_op> ![]() 更新即將完成 OK 完成了 <ignore_js_op> ![]() 看,產生了76MB的MSP文件,我們先做個測試,直接刪除這些msp文件 然后再重新檢查Windows Update <ignore_js_op> ![]() 發現直接刪除msp后 Office只有3個了,這明顯不正常,原先33個按道理安裝5個后更新這么說也會有28個的樣子吧,OK 我們吧刪除msp文件恢復回去 再來使用我寫的程序,清理注冊表,然后再刪除msp文件看看結果 <ignore_js_op> ![]() OK,完美~~~ 之后我又以每次5個Office更新為單位,還是循環 安裝-清理 直到所有更新安裝完成,一切正常 另外我還測試了6個可代替更新,也正常 謝謝觀賞~~~~~~~~ 如果你有能力,你可以自行做實驗 邏輯很簡單 第一步:刪除所有這樣的注冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\***********\Patches 第二步:刪除所有C:\Windows\Installer目錄下的msp文件 另外這個特性將在下個版本的Dism管理器中實現,如果你是一名強迫症但又不會操作,你可以等待我的新版本 Dism管理器地址 http://bbs.pcbeta.com/viewthread-1423429-1-1.html 身為一名強迫症患者,大家一起來折騰吧(●'◡'●) |