COM Surrogate 是什麼,為什麼一直在執行
COM Surrogate 是 Windows 的正常處理程序,就是 C:\Windows\System32 裡的 dllhost.exe,它把某個元件放在獨立的處理程序中執行,這樣元件出問題時,不會拖垮呼叫它的程式。你看到它,通常是因為檔案總管正在產生縮圖。同時有好幾個是正常的,一個隨著你瀏覽資料夾出現又消失的,正在做它該做的事。如果有一個一直很忙,或者檔案顯示「已在 COM Surrogate 中開啟」,多半指向某個縮圖處理常式,或某個有問題的檔案。
它為什麼存在
Windows 程式常常會把額外的程式碼當成 DLL 裡的 COM 元件載入。如果那個 DLL 在程式裡當掉,整個程式也會跟著當掉。Raymond Chen 在 Microsoft 的 Old New Thing 解釋,檔案總管擷取縮圖時會用 COM Surrogate,所以縮圖擷取器當掉時,毀掉的是 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 裡由 Microsoft 簽署的檔案,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 會再啟動一個新的,但原因仍然存在。
- 不要像舊教學那樣,把它加進資料執行防止(DEP)的例外。那樣只是降低了一項保護,卻沒有找出損壞的元件。
- 不要為了這件事安裝登錄清理工具或「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 簽署,再看它代管的是哪個元件。