COM Surrogate 是什么,为什么一直在运行
COM Surrogate 是 Windows 的正常进程,也就是 C:\Windows\System32 里的 dllhost.exe,它把组件放到单独的进程里运行,这样组件出了问题,也不会拖垮调用它的程序,平时看到它,多半是文件资源管理器在生成缩略图。同时有好几个是正常的,浏览文件夹时一会儿出现一会儿消失也是正常的,一直很忙,或者提示文件“已在 COM Surrogate 中打开”,通常是某个缩略图处理程序或者某个坏文件的问题。
它为什么存在
Windows 程序经常以 DLL 里的 COM 组件形式加载额外的代码,DLL 在程序里崩了,整个程序也跟着崩。Raymond Chen 在 微软的 Old New Thing 里讲过,资源管理器提取缩略图时会用 COM Surrogate,缩略图提取程序崩溃时,崩掉的是这个代理进程,不是资源管理器。老提示“COM Surrogate 已停止工作”也是这么回事,通常是里面的组件崩了,资源管理器靠这个设计活了下来。
Windows 启动它时会指定要运行哪个组件:
C:\Windows\System32\dllhost.exe /Processid:{AB8902B4-09CA-4BB6-B78D-A8F59079A8D5}
要查的就是这个 ID,这一个是 Windows 的缩略图缓存。别的程序也用同一个进程运行自己的组件,所以光看名字,看不出是谁让它这么忙。
查出是哪个组件
- 按
Ctrl + Shift + Esc,打开“详细信息”页。 - 在列标题上右键,选择“选择列”,勾选“命令行”。
- 找到
dllhost.exe,看/Processid:后面的 ID。
也可以在 PowerShell 里列出所有副本:
Get-CimInstance Win32_Process | Where-Object Name -eq 'dllhost.exe' | Select-Object ProcessId, CommandLine
再查这个 ID,换成你看到的那个:
(Get-ItemProperty 'Registry::HKEY_CLASSES_ROOT\CLSID\{AB8902B4-09CA-4BB6-B78D-A8F59079A8D5}').'(default)'
Windows 11 上这条返回 Thumbnail Cache Class Factory for Out of Proc Server,如果你查到的是第三方产品的名字,那就更新或者卸载那个产品。
不同症状怎么办
| 看到的情况 | 可能的原因 | 可以试试 |
|---|---|---|
| 打开某个文件夹时 CPU 或磁盘很高 | 正在给很多大文件生成缩略图 | 等它跑完,或者把这个文件夹切到“详细信息”视图 |
| 每次打开同一个文件夹 CPU 都很高 | 有一个损坏的媒体文件,或者解码器处理它时出错 | 分批把文件移出去找到它,再更新或卸载解码器包 |
| “操作无法完成,因为文件已在 COM Surrogate 中打开” | 缩略图处理程序还占着这个文件 | 关掉预览窗格和文件夹,等几秒再试 |
| 一直崩溃或者提示“已停止工作” | 第三方组件有问题 | 按上面的办法查 ID,再更新或卸载那个软件 |
| 缩略图不对或者过时 | 缩略图缓存损坏 | 在磁盘清理里清“缩略图”,见 磁盘清理和存储感知怎么选 |
想彻底不生成缩略图,打开“文件资源管理器 › 查看更多(…)› 选项 › 查看”,勾选“始终显示图标,从不显示缩略图”,负担没了,文件夹里也就看不到图片预览了,这同时也是个好办法来验证原因,问题消失就说明确实是缩略图。
它是不是病毒
真的那个是微软签名的文件,在 C:\Windows\System32,32 位副本在 C:\Windows\SysWOW64。恶意软件可能借用这个名字,也可能把代码放进真的 dllhost.exe 里运行,所以路径对只是很好的证据,不算证明。先查文件:
Get-AuthenticodeSignature C:\Windows\System32\dllhost.exe
签名者应该是 Microsoft Windows。如果 dllhost.exe 是从别的地方运行的,或者某个副本网络活动很多,或者组件 ID 指向 AppData、Temp 里的文件,就要警惕了,用 Microsoft Defender 跑一次完整扫描。
不要这样做
- 不要删除或者拦截
dllhost.exe,Windows 和很多程序都依赖它,系统文件检查器也会把缺失当成损坏。 - 不要以为结束进程就算修好了,结束一个卡住的副本是安全的,最多某个缩略图或者对话框出错,需要时 Windows 会再启动一个,但原因还在。
- 不要照老教程把它加进数据执行保护的例外,这是在降低保护,也找不到出问题的组件。
- 不要为这个问题装注册表清理工具或者“DLL 修复”工具,它们都查不出哪个组件出了错。
Mole 能做什么
Mole for Windows 的状态页会把同一会话里的 COM Surrogate 合成一行,CPU 和内存是所有副本加起来的。在这一行的菜单里选“为什么在运行?”,能看到占用最高的几个副本和它们的 PID、CPU、内存,还有“可执行文件”和启动它的进程,以你自己的账户、没有提权运行的副本还会显示“命令”和其中的 /Processid,不用去任务管理器加列,点一个副本可以看它自己的详情。COM Surrogate 从 Windows 文件夹运行,所以 Mole 把它标成系统进程,不提供“终止”和“强制退出”,要结束卡住的副本就用任务管理器。Mole 不修缩略图处理程序,清理页也没有缩略图缓存这一项,这件事交给磁盘清理。想多了解一些,可以看 Windows 常见进程都是干什么的。
常见问题
COM Surrogate 是什么?
就是 dllhost.exe,一个在调用程序之外托管组件的 Windows 进程,组件崩了也只影响它自己,文件资源管理器用它生成缩略图,别的程序也会用。
为什么有这么多 COM Surrogate 进程?
每个副本托管一个组件,所以同时有几个是正常的,很多副本闲下来后会自己退出。
可以结束 COM Surrogate 吗?
可以,结束卡住的副本是安全的,需要时 Windows 会再启动一个。同一个副本反复忙起来的话,去查它的组件 ID,不要一遍遍结束。
为什么提示文件在 COM Surrogate 中打开?
缩略图处理程序正在读这个文件,关掉文件夹和预览窗格,等几秒再试。同一类文件总是这样的话,打开“始终显示图标,从不显示缩略图”确认一下原因。
COM Surrogate 是病毒吗?
真的那个文件不是,确认它从 C:\Windows\System32 或 C:\Windows\SysWOW64 运行,并且由 Microsoft Windows 签名,再看它托管的是哪个组件。