@
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 左右,根本不可能容纳我安装的那些软件。