以前就发现从 Win7 开始,微软会在安装文件的时候把安装包保存在 C 盘用 UUID 命名的某个文件夹下,Stackoverflow 和 Microsoft Community 上面也有人讨论过这个问题,结论是不删。好,那就让你存吧。
现在发现这货还会重复保存。
用小工具扫了一下,占了加起来差不多 10 个多 G 的空间,对于 SSD 来说,可不少了。特别是装了 Visual Studio 2015 以后的版本,明显感觉膨胀了不少。VS 2010 其实都还好。
这几个位置是重灾区:
C:\ProgramData\Package Cache
C:\Users\All Users\Package Cache
C:\Windows\Installer\
在 C:\Windows\Installer\下保存的是重命名后的安装文件,经过二进制对比,其实跟安装程序使用的安装文件是一模一样的。
微软能不能上点心啊,v2 上的微软员工能不能内部提一下这种低级的问题。
1
xd314697475 2018-09-08 20:25:23 +08:00
这是什么软件?
|
2
shijingshijing OP @xd314697475 NoClone 很久以前的一个小工具,貌似是 VB 写的。
|
3
orangeade 2018-09-08 20:38:27 +08:00
MSI 安装包就是这个缺点,太浪费空间,好处就是多了更改和修复的功能
|
4
azh7138m 2018-09-08 20:57:09 +08:00 via Android 1
这些存下来的 msi 在卸载和修改的时候会用到
|
5
kerr92 2018-09-08 21:00:25 +08:00 via iPhone 12
微软的程序员是不会注意到这种问题的,他们的 C 盘大小都是以 TB 为单位……
|
6
zro 2018-09-08 21:32:29 +08:00 1
Win10 每半年升个级就滚出硬盘了,Win7 就。。。其实也快没几个月的更新了
|
7
reus 2018-09-08 21:35:30 +08:00 2
找个软粉洗洗就干净了
|
8
shijingshijing OP @azh7138m 我知道 msi 文件的作用,我的 point 是不应该重复性的拷贝,特别是 vs 的安装文件,本身个头就大,再翻倍一把,随时受不了。
@orangeade 其实 msi 文件完全不需要备份,只需要你自己在特定的地方保留最原始的安装包即可。我猜之所以有备份安装包这种脑残的设定是因为微软收到太多的用户投诉说 xx 软件不能卸载,最后不得不一股脑儿的把所有的安装文件全部备份一把。 微软的问题是不提供选项关闭这个备份功能,即使默认备份了,不提供工具 /选项可以有选择的删除这些无用的包。像 VS 这种大软件,基本上都会保留一个原始的安装镜像的,这些安装包对使用 vs 的人(起码是很懂 windows 了吧)根本就没有意义。 微软为 vs 的安装提供了一个 --no-cache 选项,实际上只是缓解了 vs 这一个文件的安装而已。 |
10
anonymous256 2018-09-08 21:59:58 +08:00 via Android
你可以用 everything 搜这个文件: windows.edb
我的这个文件都 30G 了,windows 索引数据库文件。 windows 在某些方面做的很糟糕。 |
11
Cooky 2018-09-08 22:00:49 +08:00 3
XP 才是最好的 Windows (
|
12
FlyChina 2018-09-08 22:01:11 +08:00
Dism++ 了解一下
|
13
shijingshijing OP @Cooky 你说对了,Win 7 里面就掺了太多屎,而且砍掉了太多实用的小功能:搜索功能,右下角显示网络状态功能,经典的开始菜单等等。
@anonymous256 说到 everything,我就顺便给你安利一款更好用的搜索软件 Agent Ransack,比 Windows XP 的搜索还好用,能查找 pdf 里面的文字,非常强大。 @FlyChina 这个 Dism++我也装了,然而仍然不敢删这几个 package cache,怕出什么幺蛾子。其实问题不在于删不删,而是微软不给个官方的准信到底这些东西留着有啥用,删了有啥后果,也不提供官方的选项。 |
14
heiybb 2018-09-08 22:13:49 +08:00 via Android
就是很多垃圾…只能眼不见心不烦
以前精力旺盛还会测一测到底哪个和哪个关联删了有什么影响 现在懒得动了 不去自己翻它就当它不存在算了 |
15
RainyH2O 2018-09-08 22:31:53 +08:00 1
所以我买了 500G 的 SSD 来防止心烦
即使这样卸载不干净,注册表残留等等问题还是总让我个强迫症难受 要想根治还是换 Linux 吧,啥时候不玩 Steam 我可能就直接放弃 Win 了 |
16
ooo3o 2018-09-08 22:32:06 +08:00
复制移到其他分区后删除, 然后再 mklink 指向, 算是比较好的解决方式.
|
17
shijingshijing OP |
18
azh7138m 2018-09-08 23:27:17 +08:00 via Android
@shijingshijing msi 就这么设计的啊,我可以先精简安装,然后缺了啥功能能直接安装,不就得保存一份完整的安装包嘛
现在上班主要是 Linux,excel 有 online,基础功能都在,一般买得起 jb 的 IDE 也不缺钱换块大 SSD 的吧。 Linux 桌面问题还是太多了,我的 font config 爆炸很久了,还有好多程序莫名的不支持缩放,还有就是缺好多驱动 |
19
kokutou 2018-09-08 23:44:47 +08:00
Installer 里的别动,卸载、打补丁需要用到。
|
20
crab 2018-09-09 00:16:21 +08:00
有的是自动修复用的,主要系统分区容量也够就无所谓。
|
21
geelaw 2018-09-09 05:41:16 +08:00 5
@kerr92 #5 @reus #7 无知的典型,大放厥词
首先 C:\Users\All Users 就是 C:\ProgramData,这是一个 NTFS junction,出于兼容性目的存在的,为的是让一些(古早味)程序访问 All Users 的时候不会找不着北。 接下来看 C:\Windows\Installer 和 C:\ProgramData\Package Cache。在我的电脑上,我自己分析了一下: # 获得所有的 hash $WindowsInstaller = Get-ChildItem C:\Windows\Installer -File -Recurse -Force | Get-FileHash $ProgDataPkgCache = Get-ChildItem 'C:\ProgramData\Package Cache' -File -Recurse -Force | Get-FileHash # 查看文件夹自重复 $WinInstSelfDup = $WindowsInstaller | Group-Object Hash | Where-Object Count -gt 1 # 我这里看到重复的文件都只重复了一次 $WinInstSelfDup | Out-Host; # 查看重复文件的大小(每组算一次) $WinInstSelfDup | ForEach-Object { Get-Item $_.Group[0].Path } | Select-Object -ExpandProperty Length | Measure-Object -Sum | ForEach-Object { $_.Sum / 1MB } # 我这里不到 2MB # ProgramData\Package Cache 里面的文件自己重复大小是 2-3 次 # 重复文件(每组一次)不到 9 MB # 接着我们分析两个文件夹之间的重复文件 $WindowsInstaller | Where-Object { $ProgDataPkgCache | Where-Object Hash -eq $_.Hash | Measure-Object | Select-Object -ExpandProperty Count } | ForEach-Object { Get-Item $_.Path } | Select-Object -ExpandProperty length | Measure-Object -Sum # 上述命令输出两个文件夹之间重复的文件大小(只算 Windows\Installer 里面出现的次数) # 不到 60MB 我觉得这应该不算是什么问题。我的电脑安装了如下软件:7-Zip, Adobe Reader CC, iTunes, Git for Windows, Image Composite Editor, Office 365 Home, Visual Studio 2017 Community (Managed Desktop, Native Desktop, UWP), Pulse Secure, SourceTree, MiKTeX. 此外,可以用 fsutil 验证上述两个文件夹里的文件不互为 hard link。 @shijingshijing #8 MSI 安装包不总是可用,例如它存在于可移动介质或者是 on-demand 来自网络。 这些文件也不是所有的东西的完整安装包,因为在我的电脑上两个文件夹一共才 1300 MB 左右,根本不可能容纳我安装的那些软件。 |
23
xuanbg 2018-09-09 08:51:10 +08:00 1
@shijingshijing Linux 也会产生很多垃圾文件。。。同样很难删除。。。这个问题不是操作系统的锅,而是应用软件的锅。
|
24
reus 2018-09-09 10:32:01 +08:00 2
你看,软粉一洗就只有几十兆了,多干净啊。十几个 G ?不存在的!楼主还不升级 SSD ?小心他们说你大放厥词!
|
25
krixaar 2018-09-09 11:52:04 +08:00 1
@reus 但是 C:\ProgramData\Package Cache 和 C:\Users\All Users\Package Cache 确实是同一个地方,开个 cmd,cd 到 C:\Users,用 dir /A:L 回车可以看到是链接,所以这两个位置不存在重复一说,能看到两个,只占一份空间。
|
26
shijingshijing OP |
27
rainex 2018-09-09 12:57:06 +08:00 via iPad
软件的锅,跟系统关系不大,osx 里系统自带的卸载方式基本都不管垃圾文件的,一样是系统越来越臃肿,linux 也是
|
28
CRVV 2018-09-09 13:20:06 +08:00 1
@geelaw
在我的机器上 Windows/Installer 27.4 GiB ProgramData 7.58 GiB ProgramData 和 Windows/Installer 里重复的文件,每个文件只算一次,一共有 1.5 GiB 重复次数最多的是 /c/ProgramData/Microsoft/Search/Data/Applications/Windows/GatherLogs/SystemIndex/SystemIndex.12.Crwl,79 次,不过这个文件只有 2 bytes 大于 100 MiB 的文件有 3 个,全是微软家的东西,一共 440 MiB 14903790e1237de08c6243db5de6e062bf3867561212b0baa8a8812bc3697fdf 150634496 /c/ProgramData/Microsoft/VisualStudio/Packages/Microsoft.VisualStudio.AspNetPackages.Msi,version=1.0.20124.0/AspNetWebToolsPackagesVS15_ENU.msi 14903790e1237de08c6243db5de6e062bf3867561212b0baa8a8812bc3697fdf 150634496 /c/Windows/Installer/4a6ef0.msi 3675b2e23df6b639dba1706ae0b969df1e1b359d25c8ed770401430d58807358 160104448 /c/ProgramData/Microsoft/VisualStudio/Packages/Microsoft.VisualStudio.AspNetCoreLocalFeed.1.1.Msi,version=15.0.11421.0/AspNetCoreLocalFeed_1_1_VS15_ENU.msi 3675b2e23df6b639dba1706ae0b969df1e1b359d25c8ed770401430d58807358 160104448 /c/Windows/Installer/4a6f41.msi 9ac20c0e94ca5c22388d710e0ff4f11576ff420cded1866b9bcd1a9cca74e026 123056128 /c/ProgramData/Microsoft/VisualStudio/Packages/Microsoft.VisualStudio.AspNetCoreLocalFeed.Msi,version=15.0.11421.0/AspNetCoreLocalFeedVS15_ENU.msi 9ac20c0e94ca5c22388d710e0ff4f11576ff420cded1866b9bcd1a9cca74e026 123056128 /c/Windows/Installer/4a6f3a.msi 还有一个 WinSxS 也是类似的情况,越用越大,据说不能删 更扯的是 Windows 还经常到一个盘的根目录下面创建一大堆临时文件不删 https://social.technet.microsoft.com/Forums/ie/en-US/b65af122-f4db-4053-a22d-f2b1081cc01e/windows-update-temporary-folder-location?forum=winserverwsus 2010 年就有人提了,我在最近 30 天之内还遇到过 Windows 特别喜欢搞一大堆不知道有没有用的文件存着,这种事情大家都早就知道了,其实没什么可辩解的 |
30
reus 2018-09-09 13:29:38 +08:00 1
@krixaar 重复不重复是其次,占空间越来越大,这才是问题。linux 不断增大的只有日志文件,没见过安装包还需要留着不能删除的。磁盘读写量还明显比旧版的高得多,虽然 SSD 快,但 SSD 也有读写寿命的,我就不明白每次开机写入的那堆究竟是什么东西。
|
31
geelaw 2018-09-09 13:49:17 +08:00 4
@CRVV WinSxS 里面一些文件和 Windows 以及 System32 和 SysWoW64 里面是硬链接关系,见 https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/determine-the-actual-size-of-the-winsxs-folder
Windows 10 会自己删除没有用的 WinSxS 文件,见 https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/clean-up-the-winsxs-folder 至于“不知道有用没用”的原因,是因为不知道用户未来的需要( Windows 不能预测未来),而不是本身是否知道。 你最后提到的那个帖子的问题是 Windows 的更新安装器最后留下了不含内容的文件夹,而不是留下了有内容的临时文件,是两个不同的问题。此外,那个帖子的重点并不是占用空间的问题,而是安全和速度问题(帖子主人提到 server 的最大剩余空间 volume 很可能是 Storage Area Network 或者非 NTFS 格式的分区)。 对于 VS,你可以通过 https://blogs.msdn.microsoft.com/heaths/2017/04/19/cleaning-up-the-visual-studio-2017-package-cache/ 提到的方法删除 cache,但是这将失去离线修复 VS 组件的功能。 你的 Installer 文件夹大得有些离谱了,根据 https://blogs.msdn.microsoft.com/heaths/2005/11/29/windows-installer-cache/ 这个文件夹里是不包括很多信息的( cabinet streams are stripped ),应该调查是否是你安装的程序的 MSI 编写方法有问题。 |
32
ysc3839 2018-09-09 13:53:01 +08:00 via Android
@rainex macOS 下大部分软件没有“卸载”这个操作,“安装”只是解压,“卸载”只是删除,系统自然不会处理程序产生的文件。
macOS 系统的 pkg 安装包也没有卸载操作。 有卸载操作的只有那种使用自己的安装 /卸载程序的软件。 |
33
geelaw 2018-09-09 13:53:15 +08:00 2
@reus #30 That wouldn't make sense for me. 因为 Windows 的日志默认都是有限额的。而且这个问题和 Linux 还是 Windows 没关系。如果你需要卸载和更新软件,总是需要存储关于安装的信息的。
如果您不能读懂重复文件的大小和总大小的区别,我觉得您不适合考虑安装信息占了多少空间的问题的。 |
34
janus77 2018-09-09 16:02:38 +08:00
@anonymous256 #10 我只有 600m ……
|
36
alvin666 2018-09-09 16:58:54 +08:00 via Android
还有更恶心的驱动...老驱动得借助第三方软件+管理员权限才能删,你说为了备份也就算了吧,一个驱动保存三四个版本我很服气,尤其是 nv 家驱动一个几百 m
|
37
gnaggnoyil 2018-09-09 17:26:32 +08:00
@msg7086 `pacman -S pacman-contrib & paccache -rk 0`
|
38
zwh2698 2018-09-09 17:36:03 +08:00 via Android
Office 还内置游戏呢
|
39
gnaggnoyil 2018-09-09 17:39:07 +08:00
当然我得废话一句 pacman 的 cache 中的安装包都是很有用的,特别是在要滚回到之前的版本的时候.Windows 中的安装包同理.我这边 VS2017+MS Office 2016 全家桶的情况下 Package Cache 和 Installer 也不过 1.3GB,所以至少对我而言只要定期清理 windows.edb 就没什么空间不足的问题的……
|
40
fengleidongxi 2018-09-09 17:49:06 +08:00
关闭 update 应该能解决
|
41
xxgirl2 2018-09-09 19:36:02 +08:00
用 baobab 看了一下,.../Windows/Installer 大小是 18G。反正 Win8.1 能用到 2023 年,先放着不管了。
|
42
CRVV 2018-09-09 20:16:02 +08:00
|
43
uptime 2018-09-09 20:17:22 +08:00
一看标题就知道说 MSI 格式了
即使删了也没啥,就是正常卸载是卸载不了,提示缺了这个 MSI 文件。 如果你确实你使用的软件不卸载的,删了也没什么。至于修复安装,几乎没人会用到。 |
44
CRVV 2018-09-09 20:27:25 +08:00
@geelaw
$ du -sh /mnt/c/Windows/Installer 28G /mnt/c/Windows/Installer $ du -sh /mnt/c/Windows/Installer/* | sort -k 1 -h -r | head 2.0G /mnt/c/Windows/Installer/$PatchCache$ 252M /mnt/c/Windows/Installer/feb3822.msp 252M /mnt/c/Windows/Installer/a6ac9.msp 252M /mnt/c/Windows/Installer/9b30e.msp 252M /mnt/c/Windows/Installer/9044ce9.msp 252M /mnt/c/Windows/Installer/70511be.msp 252M /mnt/c/Windows/Installer/644a705.msp 252M /mnt/c/Windows/Installer/38e694c4.msp 252M /mnt/c/Windows/Installer/36ec9d5e.msp 252M /mnt/c/Windows/Installer/2f1a6.msp 网上说排第一的 PatchCache 里的东西可以删所以略过 下面这一堆奇怪名字的 msp,我一个一个点开看了,出来的窗口的标题全是 Microsoft Office xxxxx 所以这锅还是微软的 |
45
ooooo 2018-09-09 21:03:46 +08:00 1
C:\Windows\Installer\
下面的文件大小高达 39G 然后我把删了 |
46
ooooo 2018-09-09 21:04:18 +08:00
也是前几天发现此目录占用非常大
|
47
murmur 2018-09-09 21:28:02 +08:00
@shijingshijing 网络状态也就拨号时代那个动画有意义 现在都宽带了 电脑里没几个一直联网的软件都不好意思用
|
49
mingl0280 2018-09-10 01:33:53 +08:00
@shijingshijing
1.msi 包不止是安装 /卸载信息,某些程序会把自己的图标和部分资源放在这里面(例如楼上那个 ooo 如果你装了 XShell 的话你就会发现 XShell 的默认图标没了) 2.微软的软件并不是从中心服务器上弄下来的,包管理器根本不可行,这种情况下你如果要卸载一个八百年前的软件还能指望软件供应商服务器上有下载包?不本地存一个怎么办? pacman 等玩意儿平时能删掉包的原因就是可以随时从服务器上再下一份缓存,就这样还是很容易出现奇怪的残留问题( ERROR 目录不为空想必各位都见过),怎么就这么肯定 linux 包管理比 windows 好的? 3.msi 还有个功能是“恢复最近一次正确的配置”,以及回滚安装。 |
51
dalieba 2018-09-10 02:14:04 +08:00 via Android
PE 访问 C 盘,找这几个文件夹以后再设为压缩。
|
52
geelaw 2018-09-10 02:25:37 +08:00
@CRVV #44 在我的电脑上 Installer 文件夹里最大的几个(超过 30 MB )是 Adobe Reader CC 和 iTunes。
此外,$PatchCache$ 的正确删除方式是使用 Disk Cleanup (cleanmgr.exe)。 你可以通过如下脚本确定 Installer 里面是否有不需要的文件(“需要”的定义是该安装包在注册表中有注册,这表示删除、更改、修复、更新软件的时候需要它) $found = Get-ChildItem "$env:WINDIR\Installer\*" -Force -Recurse -Include *.msi, *.msp -File | ForEach-Object { $_.FullName.ToLowerInvariant() } $registered = Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData -Recurse -Force | Get-ItemProperty -Name LocalPackage -ErrorAction Ignore | ForEach-Object { $_.LocalPackage.ToLowerInvariant() } $found | Where-Object { $_ -notin $registered } @ooooo #45 删除该文件夹中的文件可能导致你无法 **更新** 和 **卸载** 使用 MSI 的软件。 @zwh2698 #38 Office 软件若没有明确表示内置游戏,且你是在较新的版本中发现这个现象的,建议你联系微软。因为 Trustworthy Computing 的要求,微软的产品中不应该包含任何“彩蛋”。 @alvin666 #36 这些驱动不删除的原因是,如果你可以 sysprep Windows,然后把镜像复制到另一台电脑。 |
53
LGA1150 2018-09-10 02:42:14 +08:00
你看到的只是同一个文件的两个引用,叫“硬链接”
|
54
roshad 2018-09-10 03:05:58 +08:00 1
我 wInstaller 100 多 G. 我是弱智, 我装的都是垃圾软件, 微软是全知全能超越众生的上帝.
|
55
components 2018-09-10 03:13:20 +08:00
@RainyH2O
改进版的 Steam Play,允许 Linux 玩家游玩 Windows 游戏。为了实现这个目标,Steam Play 加入了一个改良版的 Wine,叫做 Proton,为 Windows 游戏提供兼容性和使用 Vulkan API。 来源: https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561 |
57
zk8802 2018-09-10 03:42:44 +08:00 via iPhone
不要用硬链接把 Windows\Installer 文件夹移到其它地方。某些安装程序(比如 Visual Studio 2015 )会删掉那个硬链接,然后创建一个空的 Windows\Installer 目录。
|
58
reus 2018-09-10 09:17:27 +08:00
@msg7086 修复直接用 livecd,然后 arch-chroot 进去,用 pacstrap 爱修啥修啥,怎么不能修复?
回滚?干嘛要回滚?用上面的方法,有什么解决不了的?我没发现有任何问题,有问题也是你的水平问题。 |
59
james19820515 131 天前
调整 c 盘容量到 200g 。
|