# COM Surrogate란 무엇이고 왜 계속 실행되나요

COM Surrogate는 `C:\Windows\System32`에 있는 `dllhost.exe`라는 정상적인 Windows 프로세스로, 구성 요소를 별도의 프로세스에서 실행해 그곳의 오류가 요청한 프로그램을 함께 무너뜨리지 않게 합니다. 눈에 띄는 가장 흔한 이유는 파일 탐색기가 미리 보기 그림을 만들고 있기 때문입니다. 복사본이 여러 개인 것은 정상이고, 폴더를 둘러볼 때 나타났다 사라지는 복사본은 제 할 일을 하는 중입니다. 계속 바쁜 복사본이나 "COM Surrogate에서 파일이 열려 있습니다"라는 메시지는 보통 특정 미리 보기 그림 처리기 하나나 문제가 있는 파일 하나를 가리킵니다.

## 존재하는 이유

Windows 프로그램은 DLL에 든 COM 구성 요소로 추가 코드를 불러오는 일이 많습니다. 그 DLL이 프로그램 안에서 비정상 종료되면 프로그램 전체가 함께 종료됩니다. Raymond Chen은 [Microsoft의 Old New Thing](https://devblogs.microsoft.com/oldnewthing/20090212-00/?p=19173)에서, 탐색기가 미리 보기 그림을 추출할 때 COM Surrogate를 사용하므로 추출기가 비정상 종료되어도 탐색기가 아니라 대리 프로세스가 사라진다고 설명합니다. 오래된 "COM Surrogate가 작동을 멈췄습니다" 메시지도 이것으로 설명됩니다. 보통 그 안에서 구성 요소가 비정상 종료되었다는 뜻이며, 설계 덕분에 탐색기는 살아남았습니다.

Windows는 특정 구성 요소를 지정해서 이를 시작합니다.

```text
C:\Windows\System32\dllhost.exe /Processid:{AB8902B4-09CA-4BB6-B78D-A8F59079A8D5}
```

찾아봐야 할 것이 이 ID이며, 위의 ID는 Windows의 미리 보기 그림 캐시입니다. 다른 프로그램도 자기 구성 요소를 위해 같은 프로세스를 쓰므로, 이름만으로는 바쁜 복사본 뒤에 누가 있는지 알기 어렵습니다.

## 어떤 구성 요소인지 알아내기

1. `Ctrl + Shift + Esc`를 눌러 **세부 정보** 탭을 엽니다.
2. 열 머리글을 마우스 오른쪽 단추로 클릭하고 **열 선택**을 고른 다음 **명령줄**을 선택합니다.
3. `dllhost.exe`를 찾아 `/Processid:` 뒤의 ID를 읽습니다.

또는 PowerShell로 모든 복사본을 나열할 수도 있습니다.

```powershell
Get-CimInstance Win32_Process | Where-Object Name -eq 'dllhost.exe' | Select-Object ProcessId, CommandLine
```

그런 다음 ID를 본인 것으로 바꿔 조회합니다.

```powershell
(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를 읽고 그 소프트웨어를 업데이트하거나 제거합니다 |
| 미리 보기 그림이 틀리거나 오래됨 | 미리 보기 그림 캐시 손상 | 디스크 정리에서 **미리 보기 그림**을 지웁니다. [디스크 정리와 저장소 센스](/ko/windows/blog/disk-cleanup-vs-storage-sense-windows)를 참고하세요 |

미리 보기 그림 생성을 아예 끄려면 **파일 탐색기 › 더 보기(…) › 옵션 › 보기**를 열고 **항상 아이콘 표시, 미리 보기 안 함**을 선택합니다. 부하는 줄지만 폴더에서 그림이 보이지 않게 됩니다. 좋은 시험이기도 합니다. 문제가 멈춘다면 원인은 미리 보기 그림이었습니다.

## 바이러스인가

진짜는 `C:\Windows\System32`에 있는 Microsoft 서명 파일이며, 32비트 복사본은 `C:\Windows\SysWOW64`에 있습니다. 악성코드가 이름을 빌려 쓸 수 있고, 진짜 `dllhost.exe` 안에서 자기 코드를 실행할 수도 있으므로 경로가 맞는 것은 좋은 증거일 뿐 증명은 아닙니다. 먼저 파일을 확인하세요.

```powershell
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 프로세스가 하는 일](/ko/windows/blog/windows-processes-explained)을 참고하세요.

## 자주 묻는 질문

### COM Surrogate란 무엇인가요?

사용하는 프로그램 밖에서 구성 요소를 호스팅하는 Windows 프로세스인 `dllhost.exe`입니다. 그곳의 오류는 그곳에 머뭅니다. 파일 탐색기가 미리 보기 그림에 쓰고, 다른 프로그램도 사용합니다.

### COM Surrogate 프로세스가 왜 이렇게 많은가요?

복사본마다 구성 요소 하나를 호스팅하므로 동시에 여러 개인 것은 정상입니다. 많은 복사본은 한동안 유휴 상태가 되면 스스로 종료됩니다.

### COM Surrogate를 종료해도 되나요?

네, 멈춘 복사본은 종료해도 안전하며 필요하면 Windows가 새로 시작합니다. 같은 복사본이 계속 바빠진다면 반복해서 종료하지 말고 그 구성 요소 ID를 찾으세요.

### 왜 COM Surrogate에서 파일이 열려 있다고 나오나요?

미리 보기 그림 처리기가 그 파일을 읽고 있습니다. 폴더와 미리 보기 창을 닫고 몇 초 기다린 뒤 다시 시도하세요. 같은 종류의 파일에서 계속 생긴다면 **항상 아이콘 표시, 미리 보기 안 함**을 켜서 원인을 확인하세요.

### COM Surrogate는 바이러스인가요?

진짜 파일은 아닙니다. `C:\Windows\System32`나 `C:\Windows\SysWOW64`에서 실행되고 Microsoft Windows가 서명했는지 확인한 다음, 어떤 구성 요소를 호스팅하는지 살펴보세요.


Canonical: https://mole.fit/ko/windows/blog/com-surrogate-dllhost
