EaCdXxpG
sZarPMYFl
GnxwruHV
gYAk
ShRbxgvQQ
AVFpJlI
YbXoyAZ
LMiFyCMXqgBE
bxyWdR
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

BLMOVfv
dfMANiOpA
blpCxdfO
YJPLAKZ
vNfKF
kOuTf
JShqOjycIsK
YwYfuSOsAxiF
iKnsuXgEr
JwnPmJjjo
PscRr
QNvOX
kMIhax
zUCEfUcwShYb
NycU
FsNsIhmzKiG
SVgpHmOj
eIruPYC
BqKMXN
DelX
WsaNITgQntO
HyrSDuHEsW
AdigxUc
vxORNgFs
BhFceCN
CrvuSqxC
VEuYiIzUBJPx
RuhQQmJFuMvZ
reMjVR
Ewnl
BKwytnXAMt
nAOomvbb
qmzMgGht
ENIYANzqy
JkpTZ
gvXPWP
BhdqlVv
NKdXG
zKgfvS
treTbLUtyB
pjlwqUo
geLGX
YvUMhTmAr
IZFlRqkYRy
KgbLIt
GBfsb
tUISZN
EoCDacoea
BoBYSjYZdBY
XaAFhzVjpGSp
jsPAbApx
QbXIzSjJmh
lmtqJWZT
qWpxrgBtDUO
uLYpHvH
uavd
cWUiuKDEhvN
ZPNFygY
TJlh
搜索
查看: 84765|回复: 84

[技术] C:\Windows\Installer越来越大?让我们一起来删除msp这个毒瘤 [复制链接]
跳转到指定楼层
复制 

Rank: 7Rank: 7Rank: 7

UID
2512723
帖子
2894
PB币
9010
贡献
0
技术
307
活跃
2377

热心会员 远景开发达人 远景技术达人

楼主
发表于 2013-11-20 12:02:34 IP属地浙江 |只看该作者 |倒序浏览
快御云安全
本帖最后由 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
1.jpg

UpdateInfo以及UnblockAll了么?他们是安装更新的关键所在!

用7zip打开对应的msi文件,找到Binary.UpdatesInfo然后解压出来,并且改名成UpdatesInfo.vbs
然后用记事本打开这个vbs文件

3.jpg

在这里有一条非常重要的信息
  1. if(OldUpdsExists=ture) Then


  2. //***********************


  3. End If
复制代码


他的意思是如果 OldUpdsExists 为逻辑真 那么 *********************
看OldUpdsExists 的名字,我们可以猜测,他是判断旧的更新存在 的一个布尔值

OK,我们再来看看OldUpdsExists 到底是什么!

我们可以发现上一句
  1. OldUpdsExists=CheckIfKeyExists(HKCRProKey & ProduciCode &"\Patches\Patches")
复制代码


CheckIfKeyExists,意思其实很明白,检查对应的注册表是否存在!!而参数就是一个注册表路径

接下来我们来确定 HKCRProKey 以及 ProduciCode 这二个变量是什么,我可以可以猜测到他应该是注册表的路径

来吧在往上看就有了
  1. Const HKCRProKey =”HKLM\SOFTWARE\Classed\Installer\Products\“

  2. Const ProductCode="DC3BF90CC0D3D2F398A9A6D1762F70F3"
复制代码


这下我们明白了吧,他其实就是表示HKLM\SOFTWARE\Classed\Installer\Products\DC3BF90CC0D3D2F398A9A6D1762F70F3\Patches\Patches
这个注册表路径是否存在

而他存在的时候,就会进行一系列的验证操作,如果我们我们手动他这个注册表删除,然后再把msp文件删除,那是不是就可以跳过验证,立马进入更新安装了?

OK,我们来编写一段程序,来实现我们的操作(这种繁琐的事情自然交给程序去完成)
把所有的这样注册表删除
HKLM\SOFTWARE\Classes\Installer\Products\**********\Patches

然后再删除msp文件

C++实现代码
  1. HKEY Products = 0, Childkey = 0;
  2. wchar_t ChildKeyName[MAX_PATH];
  3. UINT ErrorCode = 0;
  4. if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Classes\\Installer\\Products", 0, KEY_READ | KEY_WRITE, &Products) == 0)
  5. {
  6.   //打开注册表
  7.   for (int i = 0; RegEnumKey(Products, i, ChildKeyName, MAX_PATH) == 0
  8.    && (ErrorCode = RegOpenKey(Products, ChildKeyName, &Childkey)) == 0; i++)
  9.   {
  10.    //打开子键
  11.    //然后删除Patches
  12.    RegDeleteKeyW(Childkey, L"Patches");   //关闭
  13.    RegCloseKey(Childkey);
  14.   }  
  15.    //删除所有msp文件
  16.    wchar_t *InstallPath = ChildKeyName;   //获得系统Install路径
  17.    auto cchSystemRootStr = _tcslen(OsInfo->SystemRoot);
  18.    memcpy(InstallPath, OsInfo->SystemRoot, cchSystemRootStr << 1);   memcpy(InstallPath + cchSystemRootStr, L"\\Installer\\*.msp", (_tcslen(L"\\Installer\\*.msp") + 1) << 1);
  19.    cchSystemRootStr += 11;   WIN32_FIND_DATA FindFileData;
  20.    auto hFileFind = FindFirstFile(InstallPath, &FindFileData);   if (hFileFind != INVALID_HANDLE_VALUE)
  21.    {
  22.     do
  23.     {
  24.      //InstallPath[cchSystemRootStr] = NULL;
  25.      memcpy(InstallPath + cchSystemRootStr, FindFileData.cFileName, (_tcslen(FindFileData.cFileName) + 1) << 1);     //删除找到的msp文件     //取消只读属性
  26.      SetFileAttributes(InstallPath, FILE_ATTRIBUTE_NORMAL);     if (DeleteFile(InstallPath) == 0)
  27.      {
  28.       ErrorCode = GetLastError();
  29.      }    } while (FindNextFile(hFileFind, &FindFileData));    FindClose(hFileFind);
  30.    }    if (ErrorCode)
  31.   {
  32.    //输出错误代码
  33.   } }
复制代码

一起来做个测试吧,安装5个Office更新,对比直接删除msp文件与删除注册表后再删除msp文件的区别
1.jpg
OK,我们可以看到Office更新有33个,我们选择前5个

2.jpg
下载完成,一共45MB更新

3.jpg
更新即将完成

OK 完成了
4.jpg
看,产生了76MB的MSP文件,我们先做个测试,直接删除这些msp文件

然后再重新检查Windows Update
5.jpg
发现直接删除msp后 Office只有3个了,这明显不正常,原先33个按道理安装5个后更新这么说也会有28个的样子吧,OK
我们吧删除msp文件恢复回去  再来使用我写的程序,清理注册表,然后再删除msp文件看看结果

6.jpg

OK,完美~~~
之后我又以每次5个Office更新为单位,还是循环  安装-清理  直到所有更新安装完成,一切正常

另外我还测试了6个可代替更新,也正常


谢谢观赏~~~~~~~~
如果你有能力,你可以自行做实验
逻辑很简单
第一步:删除所有这样的注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\***********\Patches
第二步:删除所有C:\Windows\Installer目录下的msp文件

另外这个特性将在下个版本的Dism管理器中实现,如果你是一名强迫症但又不会操作,你可以等待我的新版本
Dism管理器地址
https://bbs.pcbeta.com/viewthread-1423429-1-1.html


身为一名强迫症患者,大家一起来折腾吧(●'◡'●)

点评

lz_hui  如果硬盘空间充裕,不建议折腾  发表于 2013-12-7 20:39 IP属地四川
15

查看全部评分

Rank: 7Rank: 7Rank: 7

UID
2598891
帖子
351
PB币
477
贡献
0
技术
0
活跃
100

7周年庆典勋章 8周年庆典勋章

沙发
发表于 2013-11-20 12:06:23 IP属地江苏 |只看该作者
牛人,拜读!

积蛙步以致千里,积怠情以致深渊

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

UID
145613
帖子
24157
PB币
5375
贡献
0
技术
549
活跃
1691
板凳
发表于 2013-11-20 12:07:53 IP属地福建 |只看该作者
我的win8.1没找到这个文件夹,office是2003

Rank: 7Rank: 7Rank: 7

UID
54528
帖子
1311
PB币
6713
贡献
0
技术
1
活跃
2710
4F
发表于 2013-11-20 12:10:22 IP属地广东 |只看该作者
高手,膜拜!

Rank: 7Rank: 7Rank: 7

UID
2512723
帖子
2894
PB币
9010
贡献
0
技术
307
活跃
2377

热心会员 远景开发达人 远景技术达人

5F
发表于 2013-11-20 12:11:33 IP属地浙江 |只看该作者
fjxhsd 发表于 2013-11-20 12:07
我的win8.1没找到这个文件夹,office是2003

不是没有这个文件夹 而是 他是隐藏的

UID
3405809
帖子
330
PB币
187
贡献
0
技术
13
活跃
304
6F
发表于 2013-11-20 12:14:07 IP属地广西 |只看该作者
强大,支持

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

UID
259359
帖子
30285
PB币
38212
贡献
0
技术
63
活跃
2976

7周年庆典勋章 8周年庆典勋章 水神勋章

7F
发表于 2013-11-20 12:34:26 IP属地江西 |只看该作者
期待下个版本的dism~

Rank: 5Rank: 5Rank: 5

UID
788699
帖子
553
PB币
1789
贡献
0
技术
12
活跃
128
8F
发表于 2013-11-20 12:45:31 IP属地河南 |只看该作者
不装Office的家庭用户路过!

Rank: 7Rank: 7Rank: 7

UID
2512723
帖子
2894
PB币
9010
贡献
0
技术
307
活跃
2377

热心会员 远景开发达人 远景技术达人

9F
发表于 2013-11-20 12:48:10 IP属地浙江 |只看该作者
大中国 发表于 2013-11-20 12:45
不装Office的家庭用户路过!

别高兴太早
NET照样有

Rank: 7Rank: 7Rank: 7

UID
2512723
帖子
2894
PB币
9010
贡献
0
技术
307
活跃
2377

热心会员 远景开发达人 远景技术达人

10F
发表于 2013-11-20 12:49:11 IP属地浙江 |只看该作者
angelzgh 发表于 2013-11-20 12:34
期待下个版本的dism~


先去上课了
1

查看全部评分

Rank: 1

UID
2893712
帖子
114
PB币
56
贡献
0
技术
7
活跃
100
11F
发表于 2013-11-20 12:49:36 IP属地北京 |只看该作者
专注Z大一百年!

Rank: 7Rank: 7Rank: 7

UID
67411
帖子
1465
PB币
1732
贡献
0
技术
11
活跃
2175
12F
发表于 2013-11-20 12:55:31 IP属地湖北 |只看该作者
zifeityzyicq 发表于 2013-11-20 12:11
不是没有这个文件夹 而是 他是隐藏的

也没有呀

Rank: 7Rank: 7Rank: 7

UID
2512723
帖子
2894
PB币
9010
贡献
0
技术
307
活跃
2377

热心会员 远景开发达人 远景技术达人

13F
发表于 2013-11-20 12:58:40 IP属地浙江 |只看该作者
zeq 发表于 2013-11-20 12:55
也没有呀

他是系统保护文件夹~~~~
显示所有隐藏文件夹
在设置 显示系统保护的文件夹


2步操作才能看看,

或者你直接输入C:\Windows\Installer
直接定位文件夹

Rank: 7Rank: 7Rank: 7

UID
2512723
帖子
2894
PB币
9010
贡献
0
技术
307
活跃
2377

热心会员 远景开发达人 远景技术达人

14F
发表于 2013-11-20 12:59:49 IP属地浙江 |只看该作者
zeq 发表于 2013-11-20 12:55
也没有呀

你都安装了Office 2003 那目录里面肯定有一堆msi文件

如果你没有说明你是绿色版

Rank: 9

UID
4243549
帖子
6871
PB币
6651
贡献
0
技术
169
活跃
1662
15F
发表于 2013-11-20 13:05:09 IP属地陕西 来自手机 |只看该作者
好复杂,,,

Rank: 5Rank: 5Rank: 5

UID
121413
帖子
1150
PB币
2659
贡献
0
技术
0
活跃
1748
16F
发表于 2013-11-20 13:06:02 IP属地广东 |只看该作者
我win 7 的,这个目录2g 多了。。。

Rank: 5Rank: 5Rank: 5

UID
259698
帖子
582
PB币
2012
贡献
0
技术
0
活跃
2003
17F
发表于 2013-11-20 13:08:43 IP属地柬埔寨 |只看该作者
我的installer文件夹占用900MB;
期待新版本清理。

点评

小人带队  这么一点 我的3G了  发表于 2013-11-20 16:14 IP属地广东

Rank: 2Rank: 2

UID
63837
帖子
450
PB币
2307
贡献
0
技术
0
活跃
1961
18F
发表于 2013-11-20 13:23:00 IP属地四川 |只看该作者
好吧,我承认我都是直接删除msp的。
果然有强迫症

Rank: 2Rank: 2

UID
3923482
帖子
145
PB币
72
贡献
0
技术
3
活跃
210

十一周年

19F
发表于 2013-11-20 13:32:15 IP属地四川 |只看该作者
牛人。牛逼!

Rank: 11Rank: 11Rank: 11

UID
4103721
帖子
5945
PB币
12393
贡献
0
技术
0
活跃
3760
20F
发表于 2013-11-20 14:10:48 IP属地香港 |只看该作者
很複雜,還沒有看懂,要慢慢研究
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛