# ProgramData 文件夹是什么，哪些能删

`C:\ProgramData` 是 Windows 的隐藏文件夹，程序把电脑上所有账户共用的数据放在这里，比如授权、设置、更新缓存和数据库。不要删这个文件夹，也不要成批清理，安全软件、Windows 功能和安装程序都靠它。旧的错误报告，以及确实已经卸载的程序留下的文件夹，确认过后通常可以删，其他东西最好交给程序自己的卸载程序或设置。

## 里面有什么

微软把它定义为 [已知文件夹](https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid)，环境变量是 `%ProgramData%`。它默认隐藏，在 `Win + R` 里输入 `%ProgramData%` 能直接到达，也可以打开“文件资源管理器 › 查看 › 显示 › 隐藏的项目”。

它和 AppData 的区别是，[AppData](/zh/windows/blog/appdata-folder-what-can-delete) 属于一个账户，ProgramData 属于所有账户。一台 ThinkPad 测试机上，里面有 `Intel`、`Lenovo`、`Tencent` 这样的厂商文件夹，还有 `Microsoft`、`Package Cache` 和 `ssh`。

你还会看到带箭头的项目，比如 `Application Data` 和 `Documents`，它们是给老程序留的链接，不是真正的文件夹。那台电脑上，`Application Data` 指回 `C:\ProgramData`，`Documents` 指向 `C:\Users\Public\Documents`，所以跟着链接走的工具可能把同一份数据算两遍甚至更多。

## 看看是什么占了空间

下面这段列出最大的文件夹，用管理员身份运行 PowerShell，被拒绝访问的文件夹会少一些：

```powershell
Get-ChildItem $env:ProgramData -Directory -Force -Attributes !ReparsePoint | ForEach-Object {
  [pscustomobject]@{ GB = [math]::Round((Get-ChildItem $_.FullName -Recurse -Force -File -Attributes !ReparsePoint -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1GB, 2); Folder = $_.Name }
} | Sort-Object GB -Descending | Select-Object -First 15
```

## 哪些能删，哪些不能

| `C:\ProgramData` 下的路径 | 是什么 | 能不能删 |
| --- | --- | --- |
| `Microsoft\Windows\WER\ReportArchive`、`ReportQueue` | 旧的错误报告 | 可以，需要管理员权限 |
| `NVIDIA Corporation\NV_Cache` | 着色器缓存 | 可以，游戏会重新编译，看 [着色器缓存](/zh/windows/blog/directx-shader-cache-windows) |
| 已卸载程序的文件夹 | 残留 | 通常可以，核对名字，再确认这家厂商没有别的产品 |
| `Package Cache` | 留着修复和卸载用的安装包 | 不要删，看 [Installer 文件夹](/zh/windows/blog/windows-installer-folder-cleanup) |
| `Microsoft\Windows Defender` | 安全数据 | 不要删 |
| `Microsoft\Crypto` | 计算机密钥和证书 | 不要删 |
| `Microsoft\Windows\Start Menu` | 所有账户的快捷方式 | 不要删，失效的快捷方式除外 |
| `ssh` | OpenSSH 服务器的主机密钥 | 不要删 |
| `Microsoft\Windows\Virtual Hard Disks` | Hyper-V 磁盘 | 只通过 Hyper-V 处理 |
| `chocolatey`、`miniconda3` 和其他包管理器 | 安装的工具 | 用工具自己删包 |
| 还在用的硬件的厂商文件夹 | 驱动、工具、授权 | 不要删，用厂商的 App |
| 还在用的程序的任何东西 | 常常是授权和数据库 | 不要删 |

删残留文件夹之前，先到“设置 › 应用 › 已安装的应用”看这家厂商还有没有别的产品，`Adobe`、`Tencent` 这样的厂商文件夹可能是几个产品共用的。先挪走或者改个名字，用几天电脑再说，确定之前留一份副本。

## 不要这样做

- 不要删 `C:\ProgramData` 或里面的 `Microsoft` 文件夹，Windows 功能、Defender 和安装程序都会出问题，而且很难修。
- 不要为了删文件夹去取得所有权，这说明你要删的是受保护的东西，改过的权限还会带来别的麻烦。
- 不要把 ProgramData 挪到别的盘，Windows 没有在装好的电脑上挪它的办法，微软也提醒重定向它可能导致更新和升级失败。
- 工具如果跟着链接走，不要相信它给的文件夹总量，用上面的命令量。

## Mole 能做什么

Mole for Windows 的“分析”能在系统盘上显示 `ProgramData` 和它的大小，`Package Cache`、`WER` 这样已知的文件夹带说明，但里面的东西都不提供“移到回收站”，这里的删除刻意不做成点一下就行。“清理”会列出其中的系统错误报告和 NVIDIA 的系统着色器缓存，后者默认不勾选，两者都需要管理员权限，它还可能列出所有账户开始菜单里失效的快捷方式。通过“软件”卸载 App 时，Mole 可以把它在 `ProgramData` 里自己的文件夹列出来给你看，到厂商文件夹就停下，不会删和其他产品共用的那一层。Mole 不清 `Package Cache`。

## 常见问题

### ProgramData 文件夹是什么？

它是 `C:\ProgramData` 这个隐藏文件夹，程序把所有账户共用的数据放在这里，比如授权、设置和缓存。

### 可以删除 ProgramData 吗？

不可以，只删确认过的东西，比如旧的错误报告或已卸载程序的文件夹。

### ProgramData 为什么这么大？

通常是一两个程序造成的，比如安装包缓存、杀毒数据、更新文件或包管理器，先量一下文件夹再决定。

### 为什么看不到 ProgramData？

它是隐藏的，在 `Win + R` 里输入 `%ProgramData%`，或者在文件资源管理器里打开“查看 › 显示 › 隐藏的项目”。

### ProgramData 和 AppData 有什么区别？

AppData 属于一个账户，ProgramData 由电脑上所有账户共用，两个都隐藏，里面都是缓存和有用的数据混在一起。


Canonical: https://mole.fit/zh/windows/blog/programdata-folder-windows
