OpenFileDialog 스크롤 시 Crash

제목 보고 내용을 이미 아실 만한 분들은 이미 아실 것 같습니다. 문제를 해결한 결과를 공유하기 위해 Claude Code를 통해 정리해서 복붙한 글입니다. AI 문체 양해 부탁드립니다.


[해결됨] .NET OpenFileDialog/OpenFolderDialog 스크롤 시 Freeze 후 Crash 현상

환경

  • Windows 10/11
  • .NET WPF 애플리케이션
  • NVIDIA GPU 드라이버 설치 환경

증상

  • Microsoft.WindowsAPICodePack.ShellCommonOpenFileDialog 또는 Microsoft.Win32.OpenFolderDialog 호출
  • 다이얼로그에서 파일/폴더 목록을 스크롤할 때 화면이 Freeze
  • 이후 프로세스가 Crash되어 종료됨

원인

NVIDIA 드라이버와 함께 설치되는 Shell Extension이 원인이었습니다.

  • Extension 이름: NVIDIA CPL Context Menu Extension
  • 설명: NVIDIA Display Shell Extension

Windows 파일 다이얼로그는 폴더/파일 목록을 표시할 때 설치된 Shell Extension DLL을 프로세스 내부에서 로드합니다. 스크롤 시 새로운 항목이 화면에 표시되면 해당 항목에 대한 Extension 코드가 실행되는데, 이
과정에서 NVIDIA Shell Extension의 버그로 인해 프로세스 전체가 Crash됩니다.

Shell Extension 동작 구조

OpenFolderDialog 호출

Windows Shell이 파일/폴더 목록 표시

각 항목마다 Shell Extension DLL 로드 및 실행 (In-Process)

스크롤 → 새 항목 표시 → Extension 코드 실행

문제의 DLL에서 오류 발생 → 호스트 프로세스 Crash

Shell Extension은 당신의 프로세스 메모리 공간 안에서 실행됩니다. 별도 프로세스가 아니기 때문에 해당 DLL에서 오류가 나면 당신의 앱이 함께 죽습니다.

┌─────────────────────────────────────┐
│ 당신의 프로세스 (.exe) │
│ ┌─────────────────────────────┐ │
│ │ OpenFolderDialog │ │
│ │ ├─ Microsoft Shell DLL ✓ │ │
│ │ ├─ Dropbox.dll ✓ │ │
│ │ ├─ 문제의Extension.dll ✗ ←── 여기서 Crash │ │
│ │ └─ … │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
↓ 전체 프로세스 사망

ShellExView로 문제의 DLL을 찾아 비활성화하면 해결됩니다.

해결 방법

1. ShellExView 다운로드

2. 관리자 권한으로 실행

shexview.exe → 우클릭 → 관리자 권한으로 실행

3. 범인 찾기

  1. Options 메뉴 → Hide All Microsoft Extensions 체크
  2. 분홍색 배경으로 출력되는 item 들이 예상되는 목록
  3. 껐다 켰다 하면서 범인 색출

4. 재부팅 또는 Explorer 재시작

변경사항 적용을 위해 Windows 탐색기를 재시작하거나 시스템을 재부팅합니다.

참고

  • 이 문제는 특정 라이브러리(WindowsAPICodePack)의 문제가 아닌 시스템 레벨의 Shell Extension 충돌입니다.
  • Microsoft.Win32.OpenFolderDialog 등 다른 파일 다이얼로그에서도 동일한 증상이 발생합니다.
  • NVIDIA 외에도 클라우드 스토리지(Dropbox, OneDrive), 압축 프로그램(7-Zip), 버전 관리 도구(TortoiseSVN/Git) 등의 Shell Extension에서 유사한 문제가 보고된 바 있습니다.

관련 링크


이번 기회에 Windows 파일 탐색기가 Shell Extension 이라는 것도 처음 알았습니다.

6개의 좋아요