이 글을 3줄로 요약하면
· 오류 126은 ERROR_MOD_NOT_FOUND, 실행 파일이 요구한 모듈(DLL)을 윈도우가 검색 경로에서 못 찾았다는 시스템 오류 코드입니다.
· 실행 파일 자체는 멀쩡합니다. 그래서 프로그램만 지웠다 다시 깔면 증상이 그대로인 경우가 많습니다.
· 원인은 네 갈래입니다. 아래 판별표에서 자기 증상을 먼저 찾고 그 섹션만 처리하면 됩니다.
오류 126은 정확히 무슨 뜻인가
코드 이름과 윈도우의 DLL 검색 순서를 알면 고칠 자리가 좁혀집니다.
126은 윈도우 시스템 오류 코드 목록에 ERROR_MOD_NOT_FOUND(126, 0x7E)로 등록돼 있고, 공식 설명 문구가 그대로 "지정된 모듈을 찾을 수 없습니다"입니다. 한글 오류 창에 뜨는 문장이 코드 설명을 그대로 옮긴 것입니다.
여기서 모듈은 대부분 DLL 파일을 뜻합니다. 실행 파일(exe)은 혼자 돌지 않고, 실행되는 순간 자기가 참조하는 DLL을 윈도우 로더에게 요청합니다. 로더가 그 DLL을 정해진 검색 경로 어디에서도 찾지 못하면 그 시점에 126을 돌려주고 프로그램은 시작되지 못한 채 종료됩니다.
핵심은 "exe는 있는데 exe가 부르는 파일이 없다"는 구조입니다. 오류 창이 권하는 "프로그램을 다시 설치해 보십시오"가 잘 안 듣는 이유도 여기 있습니다. 빠진 것이 프로그램 폴더 안이 아니라 시스템 쪽 공용 파일인 경우가 많기 때문입니다.
윈도우가 어디를 뒤지는지도 정해져 있습니다. 마이크로소프트 문서 기준으로, 전체 경로를 지정하지 않은 DLL은 안전 DLL 검색 모드(기본값 사용)에서 대략 이 순서로 검색됩니다.
이미 메모리에 올라온 모듈 → 알려진 DLL(Known DLLs) → 실행 파일이 있는 폴더 → 시스템 폴더(System32) → 16비트 시스템 폴더 → 윈도우 폴더 → 현재 폴더 → PATH 환경 변수에 등록된 폴더들
그래서 126이 뜨는 지점은 셋 중 하나입니다. 파일이 아예 없거나, 있어도 위 경로 밖에 있거나, 파일은 있는데 그 DLL이 다시 부르는 다른 DLL이 없거나. 마지막 경우가 특히 헷갈립니다. 문제의 DLL을 눈으로 확인해 놓고도 계속 126이 나오면 대개 이 상황입니다.
126과 127은 다른 코드입니다
127은 ERROR_PROC_NOT_FOUND(127, 0x7F), "지정된 프로시저를 찾을 수 없습니다"입니다. 126은 모듈 자체를 못 찾은 것이고, 127은 모듈은 찾았는데 그 안에서 필요한 함수를 못 찾은 것입니다. 127이 뜬다면 파일이 없는 게 아니라 버전이 어긋난 파일이 잡힌 것이라 조치 방향이 달라집니다.
개발 환경에서는 문구가 다르게 나옵니다. 파이썬이라면 OSError: [WinError 126] 형태의 영문 로그로, 서비스로 등록된 프로그램이라면 서비스 시작 화면에서 "오류 126"과 함께 서비스가 시작되지 못했다는 창으로 뜹니다. 겉모습은 달라도 가리키는 것은 같은 상황입니다.
증상으로 원인 좁히기
언제 뜨는지가 원인을 거의 결정합니다. 자기 줄을 찾아 그 섹션으로 가면 됩니다.
| 증상 | 유력한 원인 | 먼저 볼 항목 |
|---|---|---|
| 새 PC·새로 민 윈도우에서 설치하자마자 뜬다 | 런타임(재배포 패키지·.NET)이 아직 없다 | 원인 A → 런타임 설치 |
| 평소엔 되는데 특정 기능(플러그인·외부 연동)에서만 뜬다 | 그 기능이 부르는 추가 모듈만 없다 | 원인 A → 이후 섹션 7로 모듈 이름 특정 |
| 일반 실행은 실패, 관리자 권한으로 열면 된다 | 권한 부족 · 사용자별 설치 경로 문제 | 원인 B → 권한 고정 |
| 영상 편집·3D·게임 등 화면을 쓰는 프로그램에서만 뜬다 | 그래픽 드라이버가 올려주는 모듈이 어긋남 | 원인 C → 드라이버 점검 |
| 윈도우 업데이트·강제 종료 이후부터 여러 프로그램이 함께 뜬다 | 시스템 파일 손상 | 원인 D → sfc·DISM |
| 파이썬·개발 도구 등 명령줄에서 WinError 126으로 뜬다 | PATH·가상환경 경로가 어긋남 | 섹션 7 → 검색 경로 확인 |
"어떤 exe에서 떴는지"를 먼저 적어두면 절반은 끝납니다
오류 창 제목에는 대개 실행 파일 이름이 함께 나옵니다. 그 이름이 프로그램 본체인지, 런처인지, 플러그인 호스트(별도 exe)인지에 따라 뒤져야 할 폴더가 달라집니다. 창을 닫기 전에 파일 이름과 뜬 시각을 메모해 두면 섹션 7에서 로그를 찾을 때 바로 쓰입니다.
원인 A프로그램이 요구하는 런타임이 시스템에 없다
새 PC·새로 민 윈도우에서 처음 실행할 때 가장 흔한 갈래입니다.
많은 프로그램이 Visual C++ 재배포 가능 패키지나 .NET 런타임 같은 공용 구성 요소에 기대어 만들어집니다. 이 파일들은 프로그램 폴더가 아니라 System32·SysWOW64 같은 시스템 폴더에 들어갑니다. 그래서 프로그램을 지웠다 다시 깔아도 그 자리는 채워지지 않습니다.
1설치된 런타임 목록을 먼저 본다
Win + I → 좌측 "앱" → "설치된 앱" → 검색창에 Visual C++ 입력. 항목이 하나도 없거나 x86·x64 중 한쪽만 있으면 그 자리가 비어 있는 것입니다.
2공식 페이지에서 x86·x64를 모두 설치한다
64비트 윈도우라도 32비트 프로그램은 x86 런타임을 씁니다. 둘은 서로 다른 폴더에 들어가 충돌하지 않으니 함께 설치해 두는 편이 실패 확률이 낮습니다. 연도별(2012·2013·2015~2022) 패키지는 서로 대체되지 않고 나란히 설치됩니다.
3프로그램이 요구하는 다른 구성 요소도 확인한다
.NET Desktop Runtime, DirectX 런타임, 자바처럼 프로그램이 별도로 요구하는 것이 있으면 프로그램 본체보다 먼저 깝니다. 게임 폴더의 _CommonRedist 폴더에 이 설치본들이 들어 있는 경우도 많습니다.
4설치 후 한 번은 재부팅하고 확인한다
이미 실행 중이던 프로세스는 옛 상태를 그대로 들고 있습니다. "깔았는데 그대로"의 상당수가 재부팅 전 확인입니다.
이 방법이 안 통하는 경우
런타임이 x86·x64 모두 설치돼 있는데도 같은 창이 뜬다면, 빠진 것은 공용 런타임이 아니라 그 프로그램 전용 모듈이거나 다른 갈래입니다. 관리자 권한으로 열면 되는지부터 확인하고(원인 B), 그래도 아니면 섹션 7에서 모듈 이름을 특정하세요.
원인 B권한이 모자라 모듈을 못 읽는다
"관리자 권한으로 열면 된다"면 여기서 끝납니다.
모듈은 있는데 읽을 권한이 없어도 로더 입장에서는 "찾지 못한" 것과 같은 결과가 됩니다. 시스템 폴더나 Program Files 아래의 파일을 부르는 프로그램, 회사 PC처럼 정책이 걸린 환경에서 자주 나오는 갈래입니다.
1한 번만 관리자 권한으로 실행해 본다
실행 파일 우클릭 → "관리자 권한으로 실행". 이때 정상적으로 열린다면 원인은 권한으로 확정됩니다. 여기서 안 열리면 다음 원인으로 넘어가는 편이 빠릅니다.
2매번 관리자로 열리도록 고정한다
실행 파일 우클릭 → "속성" → 상단 "호환성" 탭 → "관리자 권한으로 이 프로그램 실행" 체크 → 확인. 바로가기가 아니라 원본 exe에 걸어야 런처를 거쳐 실행될 때도 적용됩니다.
3일반 종료가 아니라 "다시 시작"으로 재부팅한다
윈도우의 빠른 시작 기능 때문에, 종료 후 전원 켜기는 커널과 일부 모듈 상태를 그대로 복원합니다. 시작 메뉴에서 "다시 시작"을 눌러야 완전히 새로 올라옵니다.
이 방법이 안 통하는 경우
관리자 권한으로도 같은 창이 뜬다면 권한 문제가 아닙니다. 화면을 쓰는 프로그램이라면 원인 C, 여러 프로그램에서 동시에 시작됐다면 원인 D로 넘어가세요. 회사·학교 PC에서 정책으로 막혀 있는 경우라면 관리자 계정으로도 안 풀리므로 관리 담당자 확인이 필요합니다.
원인 C그래픽·장치 드라이버가 올려주는 모듈이 어긋난다
영상 편집·3D·게임처럼 화면을 직접 다루는 프로그램에서만 뜬다면 여기입니다.
그래픽 드라이버는 자기 DLL을 시스템 폴더에 함께 설치합니다. 프로그램이 그 DLL을 이름으로 부르는데 드라이버 버전이 오래됐거나 설치가 어긋나 그 이름이 없으면 126이 뜹니다. 내장 그래픽과 외장 그래픽이 함께 잡혀 있어 서로 다른 세대의 모듈이 섞이는 경우도 같은 결과를 냅니다.
1현재 드라이버 버전과 날짜를 먼저 적는다
Win + R → devmgmt.msc → "디스플레이 어댑터" 펼치기 → 장치 우클릭 → "속성" → "드라이버" 탭. 공급자·날짜·버전 세 줄을 적어 두면 재설치 후 실제로 바뀌었는지 대조할 수 있습니다.
2제조사 공식 드라이버로 다시 설치한다
엔비디아·AMD·인텔 공식 페이지에서 자기 모델용 최신 드라이버를 받아, 설치 마법사에 "클린 설치" 옵션이 있으면 함께 체크합니다. 이전 설정을 지우고 파일을 새로 깔아 어긋난 조합을 정리하는 목적입니다.
3업데이트 직후부터 시작됐다면 반대로 되돌린다
증상 시작 시점이 드라이버 업데이트 직후라면 같은 속성 창의 "드라이버" 탭 → "이전 드라이버" 버튼으로 롤백합니다. 버튼이 회색이면 되돌릴 이전 버전이 남아 있지 않다는 뜻이라 제조사 페이지에서 이전 버전을 직접 받아야 합니다.
쓰지 않는 그래픽을 "사용 안 함"으로 끄는 조치는 마지막에 씁니다
노트북에서 내장 그래픽을 끄면 화면이 나오지 않거나 절전 동작이 깨질 수 있습니다. 드라이버 재설치를 먼저 하고, 그래도 특정 프로그램만 문제일 때 그 프로그램의 그래픽 설정에서 사용할 GPU를 지정하는 쪽이 안전합니다.
이 방법이 안 통하는 경우
드라이버를 새로 깔았는데도 그대로거나, 애초에 화면과 상관없는 프로그램에서 뜬다면 이 갈래가 아닙니다. 원인 D의 시스템 파일 검사로 넘어가세요.
원인 D윈도우 시스템 파일이 손상됐다
서로 무관한 프로그램 여러 개가 동시에 같은 오류를 낼 때 의심할 갈래입니다.
업데이트가 도중에 실패했거나 강제 종료·정전이 반복되면 System32 안의 공용 DLL이 깨질 수 있습니다. 이 경우 특정 프로그램 하나가 아니라 여러 프로그램이 함께 같은 창을 냅니다.
1시스템 파일 검사를 돌린다
시작 버튼 우클릭 → "터미널(관리자)"에서 실행합니다. 5~15분 걸리며 창을 닫지 않습니다. "손상된 파일을 찾았고 복구했습니다"가 나오면 복구가 된 것이고, "무결성 위반을 찾을 수 없습니다"면 시스템 파일은 정상이라는 뜻이라 이 갈래가 아닙니다.
2복구에 쓸 원본 이미지를 먼저 고친다
sfc가 "복구하지 못했습니다"로 끝났다면 복구에 쓸 원본 자체가 깨진 상태입니다. DISM으로 구성 요소 저장소를 먼저 복구한 뒤 sfc를 한 번 더 돌리는 순서가 맞습니다.
3재부팅한 뒤 같은 프로그램으로 확인한다
복구된 파일은 재부팅 후에 실제로 적용됩니다. 다른 프로그램이 아니라 처음 오류가 났던 그 프로그램으로 확인해야 판단이 정확합니다.
이 방법이 안 통하는 경우
sfc가 "무결성 위반 없음"으로 끝났다면 시스템 파일은 멀쩡합니다. 이때는 추측을 멈추고 섹션 7에서 어떤 모듈 이름이 로그에 남았는지부터 확인해야 합니다. 이름을 모르는 상태로 재설치를 반복하는 것이 가장 오래 걸리는 길입니다.
어떤 모듈이 없는지 정확히 찾아내는 법
이름 하나만 알아내면 남은 조치는 한 갈래로 줄어듭니다.
오류 창은 "지정된 모듈"이라고만 하고 이름을 알려주지 않는 경우가 많습니다. 하지만 이벤트 로그에는 파일 이름이 남습니다. 여기서부터 시작하는 것이 재설치를 반복하는 것보다 훨씬 빠릅니다.
1이벤트 뷰어에서 그 시각의 오류를 연다
Win + R → eventvwr.msc → "Windows 로그" → "응용 프로그램". 오류가 뜬 시각과 가까운 빨간 항목을 클릭하고 하단 "일반" 탭에서 "오류 모듈 이름" 줄을 봅니다. 여기 적힌 파일 이름이 실제로 걸린 모듈입니다.
2그 이름을 검색 경로에서 확인한다
Win + E → 주소창에 C:\Windows\System32를 넣고 우측 검색창에 그 DLL 이름을 입력합니다. 32비트 프로그램이라면 C:\Windows\SysWOW64도 함께 봅니다. 프로그램 설치 폴더 안도 같은 방법으로 확인합니다.
3이름으로 어느 패키지 소속인지 되짚는다
이름 규칙이 힌트를 줍니다. msvcr·msvcp·vcruntime 계열은 Visual C++ 재배포 패키지, d3d·xinput 계열은 DirectX 런타임, hostfxr·hostpolicy는 .NET 런타임입니다. 소속 패키지를 정식 경로에서 설치하는 것이 정답이고, dll 파일 하나만 따로 내려받아 넣는 방식은 권하지 않습니다.
4명령줄에서 뜬 경우 PATH를 확인한다
파이썬·개발 도구에서 WinError 126으로 뜬다면 검색 경로가 어긋난 경우가 많습니다. 지워진 폴더가 PATH에 남아 있거나, 같은 이름의 DLL이 여러 경로에 있어 엉뚱한 것이 먼저 잡히는 상황입니다. 가상환경을 쓰고 있다면 환경을 새로 만들어 패키지를 다시 설치하는 편이 확실합니다.
파일은 있는데 126이 계속 나온다면 "그 파일의 의존 파일"을 봅니다
마이크로소프트 문서에 따르면 어떤 DLL이 다른 DLL에 의존하면, 처음 DLL을 전체 경로로 지정해 불렀더라도 그 의존 파일들은 이름만으로 다시 검색됩니다. 그래서 화면에서 확인한 DLL이 멀쩡히 있어도, 그것이 부르는 다른 파일이 없으면 같은 126이 납니다. 이 경우 개별 파일이 아니라 패키지 전체를 다시 설치해야 풉니다.
자주 묻는 질문
순서를 밟다 자주 막히는 지점들입니다.
Q.오류 126과 오류 127은 같은 문제인가요?
A.다른 코드입니다. 126(ERROR_MOD_NOT_FOUND)은 모듈 자체를 못 찾은 것, 127(ERROR_PROC_NOT_FOUND)은 모듈은 찾았는데 그 안의 함수를 못 찾은 것입니다. 127이 뜬다면 파일이 없어서가 아니라 버전이 다른 파일이 잡혔을 가능성이 큽니다.
Q.재설치를 몇 번 했는데도 같은 창이 뜹니다.
A.빠진 파일이 프로그램 폴더 밖에 있다면 재설치로는 채워지지 않습니다. 이 경우 순서를 바꿔야 합니다. 런타임을 먼저 설치하고(원인 A), 그다음 프로그램 본체를 설치합니다. 그래도 같다면 섹션 7에서 모듈 이름부터 확인하세요.
Q.인터넷에서 그 dll 파일만 받아 넣으면 안 되나요?
A.권하지 않습니다. 비공식 배포본은 버전이 어긋나거나 변조돼 있을 수 있고, 버전이 어긋난 파일이 잡히면 증상이 127(프로시저를 찾을 수 없습니다)이나 "잘못된 이미지"로 바뀌어 원인 추적이 더 어려워집니다. 소속 패키지를 정식 경로에서 설치하는 쪽이 결국 빠릅니다.
Q.게임 실행 중에도 이 오류가 뜰 수 있나요?
A.있습니다. 런처가 본체 exe를 실행하는 구조라 오류 창에 적힌 파일 이름이 런처인지 게임 본체인지 먼저 봐야 합니다. 게임은 DirectX·VC++ 런타임을 함께 요구하는 경우가 많아 원인 A에 해당할 확률이 높습니다.
Q.sfc 결과가 "무결성 위반을 찾을 수 없습니다"로 나왔습니다.
A.윈도우 시스템 파일은 정상이라는 뜻이므로 원인 D는 제외됩니다. 남은 갈래는 런타임 미설치(A)·권한(B)·드라이버(C)이고, 셋 다 아니면 프로그램 전용 모듈이 빠진 경우이므로 섹션 7로 이름을 특정하는 것이 다음 단계입니다.
Q.서비스가 "오류 126"으로 시작되지 않습니다.
A.서비스는 사용자 세션과 다른 환경에서 실행되므로, 사용자 PATH에만 등록된 경로는 보이지 않습니다. 서비스 실행 파일의 전체 경로가 맞는지, 그 파일이 요구하는 모듈이 시스템 경로에 있는지를 확인해야 합니다. 사용자 폴더에 설치된 구성 요소를 서비스가 부르는 구조라면 위치를 옮기는 것이 근본 해결입니다.
함께 보면 좋은 글
같은 "모듈을 못 찾음" 계열에서 자주 이어지는 오류들입니다.
VCRUNTIME140.dll·MSVCP140.dll 없음 오류 원인 4가지와 증상별 해결 순서 모듈 이름이 특정된 경우의 대표적인 처리 순서입니다 · 눌러서 확인하기 → 런타임 오류 R6034, C 런타임 라이브러리 오류 해결 순서 버전이 어긋난 런타임이 잡혔을 때 나타나는 다른 형태입니다 · 눌러서 확인하기 → '클래스가 등록되지 않았습니다' 오류, 왜 뜨고 어떻게 없앨까 모듈은 있는데 등록 정보가 어긋났을 때 나오는 이웃 오류입니다 · 눌러서 확인하기 →참고 문서 · Microsoft Learn — 시스템 오류 코드(0-499)
참고 문서 · Microsoft Learn — 동적 연결 라이브러리 검색 순서
참고 문서 · Microsoft 지원 — Windows에서 시스템 파일 검사기 사용





