이 글을 3줄로 요약하면
· api-ms-win-crt-runtime-l1-1-0.dll은 프로그램이 만든 파일이 아니라 윈도우의 유니버설 C 런타임(UCRT)을 구성하는 전달용 DLL이다.
· 그래서 이 파일 하나만 어디선가 구해 넣는 방식은 해결이 아니다. 어느 경로의 런타임이 빠졌는지에 따라 원인이 네 갈래로 갈린다.
· 쓰는 윈도우 버전과 오류가 뜨는 프로그램의 종류만 알면 볼 섹션이 하나로 좁혀진다. 아래 판별표부터 본다.
목차
3. 원인 A · 윈도우 7·8.1에 UCRT 업데이트가 없다
4. 원인 B · Visual C++ 재배포 패키지 손상 또는 한쪽만 설치
5. 원인 C · 프로그램 폴더에 런타임이 불완전하게 들어 있다
이 DLL은 정확히 무엇인가
파일의 소속을 알면 어떤 패키지를 손대야 하는지가 저절로 정해진다.
이 파일은 마이크로소프트의 유니버설 C 런타임(Universal C Runtime, UCRT) 구성 요소다. UCRT의 실제 코드는 ucrtbase.dll 한 파일에 들어 있고, api-ms-win-*.dll들은 그 코드로 호출을 넘겨주는 전달용(APISet forwarder) DLL이다.
vcruntime140.dll과는 소속이 다르다
vcruntime140.dll·msvcp140.dll은 Visual C++ 재배포 패키지가 설치하는 C++ 런타임이다. 반면 api-ms-win-crt-* 계열은 윈도우 쪽 구성 요소라, 같은 "런타임 오류"로 보여도 손대야 할 대상이 다르다. 이 차이를 모르면 재배포 패키지만 몇 번씩 다시 깔게 된다.
이 파일들이 놓이는 자리는 두 곳이다. 하나는 윈도우가 관리하는 시스템 폴더고, 다른 하나는 프로그램이 자기 설치 폴더에 함께 넣어 배포한 자리다. 어느 쪽이 비었는지에 따라 해결책이 완전히 갈린다.
| 놓이는 자리 | 누가 넣는가 | 비어 있을 때 볼 항목 |
|---|---|---|
| C:\Windows\System32 · SysWOW64 | 윈도우 업데이트 또는 재배포 패키지 | 원인 A · B · D |
| 프로그램이 설치된 폴더 안 | 프로그램 제작사(로컬 배포) | 원인 C |
증상으로 원인을 좁히는 판별표
쓰는 윈도우 버전과 오류가 뜨는 범위가 원인을 거의 결정한다.
| 증상 | 유력한 원인 | 먼저 볼 항목 |
|---|---|---|
| 윈도우 7 또는 8.1이고, 여러 프로그램에서 같은 메시지가 뜬다 | UCRT 업데이트 미설치 | 원인 A → 업데이트 설치 |
| 윈도우 10·11인데 최근 설치한 프로그램 하나에서만 뜬다 | 재배포 패키지 비트 불일치 | 원인 B → x86·x64 둘 다 |
| 재배포 패키지를 다시 깔았는데도 그대로다 | 패키지 설치 상태 손상 | 원인 B → 복구 실행 |
| USB나 압축 파일로 받은 무설치 프로그램에서만 뜬다 | 프로그램 폴더의 런타임 세트 불완전 | 원인 C → 정식 설치본 |
| 게임 실행 때만 뜨고 다른 프로그램은 정상이다 | 게임 폴더의 런타임 미설치 | 원인 C → redist 폴더 |
| 윈도우 10·11인데 여러 프로그램이 한꺼번에 실행되지 않는다 | 시스템 파일 손상 | 원인 D → sfc·DISM |
DLL만 따로 내려받아 System32에 넣는 방법은 쓰지 않는다
이 계열은 파일 하나가 독립적으로 동작하지 않는다. 버전이 서로 맞물린 세트라서, 한 개만 다른 버전으로 끼워 넣으면 그 자리에서는 넘어가더라도 다음 함수 호출에서 다른 오류로 이어진다. 출처가 불분명한 DLL 배포 사이트는 그 자체로도 위험하다.
원인 A윈도우 7·8.1에 UCRT 업데이트가 없다
윈도우 10·11에는 UCRT가 기본 포함돼 있지만, 그 이전 버전에는 업데이트로 따로 들어간다.
마이크로소프트는 윈도우 비스타 SP2부터 윈도우 8.1까지를 대상으로 "Windows에서 유니버설 C 런타임 업데이트"를 배포했다. 이 업데이트가 없으면 UCRT를 쓰는 프로그램은 실행 시점에 곧바로 이 메시지를 띄운다. 오래 켜지 않았던 PC, 업데이트를 꺼 둔 PC에서 특히 자주 나온다.
그래서 이 원인은 내 윈도우 버전을 확인하는 것에서 시작한다. 윈도우 10·11이라면 이 섹션은 건너뛰고 원인 B로 가면 된다.
1윈도우 버전과 시스템 종류를 확인한다
Win + I → 좌측 "시스템" → 맨 아래 "정보"로 들어가 "Windows 사양"의 에디션·버전과 "장치 사양"의 시스템 종류(32비트/64비트)를 함께 본다. 이 두 값이 이후 단계의 다운로드 파일을 결정한다.
2선행 업데이트가 깔려 있는지 확인한다
UCRT 업데이트는 윈도우 7이면 서비스 팩 1, 윈도우 8.1이면 KB2919355가 먼저 설치돼 있어야 한다. 이것이 없으면 설치 도중 "이 업데이트는 이 컴퓨터에 적용되지 않습니다"로 멈춘다. 선행 업데이트부터 설치한 뒤 다시 시도한다.
3공식 문서에서 OS와 비트에 맞는 파일을 받는다
아래 참고 문서에 걸어 둔 마이크로소프트 지원 문서에 OS별 다운로드가 정리돼 있다. 1단계에서 확인한 에디션과 비트에 맞는 파일 하나만 받아 설치하고 재부팅한다.
이 방법이 안 통하는 경우
1단계에서 윈도우 10 또는 11로 확인됐다면 이 업데이트는 애초에 설치 대상이 아니다. 설치를 시도하면 "적용되지 않습니다"가 뜨는 것이 정상이므로, 시간을 들이지 말고 원인 B로 넘어간다.
원인 BVisual C++ 재배포 패키지 손상 또는 한쪽만 설치
재배포 패키지도 UCRT 구성 요소를 함께 놓는다. 그래서 이쪽이 깨지면 같은 메시지가 나온다.
가장 흔한 실수는 x64만 설치하고 x86을 빼먹는 것이다. 64비트 윈도우에서도 32비트 프로그램은 계속 쓰인다. 오래된 유틸리티나 업무용 프로그램은 32비트인 경우가 많고, 이런 프로그램은 x86 패키지가 놓는 파일을 찾는다.
1설치된 목록에서 x86과 x64가 다 있는지 본다
Win + I → "앱" → "설치된 앱"에서 검색창에 Visual C++를 입력한다. 항목 이름 끝에 (x86)과 (x64)가 각각 하나씩 보여야 정상이다. 한쪽만 있으면 없는 쪽을 추가로 설치한다.
2둘 다 있는데도 오류가 나면 제거하지 말고 복구한다
같은 목록에서 항목 우측 점 세 개 → "수정"을 누르면 "복구 / 제거" 선택 창이 뜬다. 복구를 고른다. 다른 프로그램이 이미 이 패키지에 의존하고 있어, 먼저 제거하면 그 프로그램들까지 함께 멈출 수 있다.
3복구로도 안 되면 최신 버전을 덮어 설치한다
마이크로소프트가 배포하는 최신 재배포 패키지는 이전 버전을 대체한다. 아래 참고 문서의 공식 다운로드 페이지에서 x86과 x64를 모두 받아 차례로 설치하고 재부팅한다.
이 방법이 안 통하는 경우
x86·x64를 모두 설치하고 복구까지 마쳤는데 특정 프로그램 하나에서만 계속 오류가 난다면, 그 프로그램은 시스템 폴더가 아니라 자기 폴더 안의 런타임을 쓰고 있다. 원인 C로 넘어간다.
원인 C프로그램 폴더에 런타임이 불완전하게 들어 있다
프로그램은 시스템 폴더보다 자기 폴더를 먼저 본다. 그 자리의 세트가 불완전하면 시스템이 멀쩡해도 실패한다.
제작사는 UCRT를 시스템에 설치하는 대신 프로그램 폴더에 함께 넣어 배포할 수 있다. 이 방식(로컬 배포)에서는 ucrtbase.dll과 api-ms-win-* 전달용 DLL을 필요한 것만 골라 넣지 말고 전부 넣는 것이 권장된다. 필요한 파일 목록이 윈도우 버전마다 다르기 때문이다.
그래서 압축만 풀어 쓰는 무설치 프로그램, 다른 PC에서 폴더째 복사해 온 프로그램에서 이 오류가 잘 나온다. 만든 PC에서는 있던 파일이 옮겨 온 PC의 윈도우 버전에서는 필요한데 빠져 있는 식이다.
1프로그램 폴더 안에 런타임 설치본이 있는지 본다
설치 폴더에서 redist, _CommonRedist, vcredist, Support 같은 이름의 하위 폴더를 찾는다. 안에 들어 있는 설치 파일을 직접 실행하면 제작사가 검증한 정확한 버전이 설치된다.
2무설치본 대신 정식 설치본으로 다시 받는다
압축 해제형으로 쓰고 있었다면 제작사 홈페이지의 정식 설치 파일을 받아 설치한다. 설치 관리자는 실행 전에 필요한 런타임을 함께 놓기 때문에, 빠진 파일이 이 과정에서 채워진다.
332비트 프로그램인지 확인한다
Ctrl + Shift + Esc로 작업 관리자를 열고 해당 프로그램을 실행해 본다. 이름 옆에 (32비트)가 붙는다면 SysWOW64 쪽 파일을 쓰는 프로그램이다. 원인 B에서 x86 패키지를 빼먹지 않았는지 다시 확인한다.
이 방법이 안 통하는 경우
정식 설치본으로 다시 깔았는데도 같은 오류가 나고, 게다가 다른 프로그램에서도 비슷한 DLL 오류가 함께 보이기 시작했다면 개별 프로그램 문제가 아니다. 시스템 폴더 쪽이 깨진 것이므로 원인 D로 넘어간다.
원인 D윈도우 10·11인데 시스템 파일이 손상됐다
기본 포함이라도 파일이 지워지거나 깨지면 없는 것과 같다. 이때는 윈도우 자체를 복구한다.
윈도우 10·11은 UCRT를 기본으로 갖고 있다. 그런데도 이 오류가 난다면 시스템 파일이 손상됐거나, 백신이 오탐지로 격리했거나, 정리 도구가 지운 경우다. 여러 프로그램이 한꺼번에 안 켜지기 시작했다면 이 원인일 가능성이 높다.
1시스템 파일을 검사한다
시작 버튼 우클릭 → "터미널(관리자)"에서 실행한다. "손상된 파일을 찾아 복구했습니다"가 나오면 재부팅 후 프로그램을 다시 실행해 본다.
2복구하지 못했다고 나오면 이미지를 먼저 고친다
sfc가 "무결성 위반을 찾았지만 복구하지 못했습니다"로 끝났다면 복구에 쓸 원본 자체가 손상된 것이다. 이 명령으로 원본을 먼저 내려받아 고친 뒤 sfc를 한 번 더 실행한다. 인터넷 연결이 필요하고 시간이 오래 걸린다.
3백신 격리함을 확인한다
Win + I → "개인 정보 및 보안" → "Windows 보안" → "Windows 보안 열기" → "바이러스 및 위협 방지" → "보호 기록"을 연다. DLL이 격리돼 있으면 복원한다. 복원 후에는 그 프로그램의 출처를 다시 확인한다.
이 방법이 안 통하는 경우
sfc와 DISM이 모두 정상으로 끝났는데 오류가 그대로면 시스템 폴더는 멀쩡한 것이다. 프로그램이 어느 경로에서 파일을 찾다 실패했는지 직접 확인해야 한다. 아래 섹션으로 내려간다.
어느 경로에서 빠졌는지 정확히 찾아내는 법
두 폴더를 직접 열어 보면 원인 B와 원인 C 중 어느 쪽인지 5분 안에 갈린다.
164비트 시스템 폴더를 먼저 본다
Win + E로 탐색기를 열고 주소창에 붙여넣은 뒤, 검색창에 api-ms-win-crt를 입력한다. 십여 개 이상이 나오면 정상이다. 하나도 없거나 몇 개뿐이면 원인 B의 x64 패키지를 손봐야 한다.
232비트 폴더와 비교한다
같은 방식으로 검색한다. 64비트 윈도우에서 이 폴더에 들어 있는 것이 32비트 파일이다. System32에는 있는데 여기만 비어 있다면, 32비트 프로그램이 실패하는 이유가 이것이다. x86 재배포 패키지를 설치한다.
두 폴더가 모두 정상인데 특정 프로그램만 실패한다면 남은 가능성은 하나다. 그 프로그램이 자기 폴더의 파일을 먼저 읽고 있다는 것이다. 프로그램 설치 폴더에서 같은 이름으로 검색해 본다.
3실행 실패 기록을 로그에서 확인한다
Win + R로 실행한 뒤 "Windows 로그" → "응용 프로그램"에서 실패 시각의 오류를 연다. 하단 "일반" 탭의 "오류 모듈 이름"에 어떤 DLL이 적혀 있는지 보면, 실제로 걸린 파일이 이 DLL이 맞는지 확정할 수 있다.
자주 묻는 질문
이 오류에서 반복해서 나오는 질문 네 가지를 정리했다.
Q.vcruntime140.dll 오류와 같은 문제인가요?
A.소속이 다릅니다. vcruntime140.dll·msvcp140.dll은 Visual C++ 재배포 패키지가 놓는 C++ 런타임이고, api-ms-win-crt-* 계열은 윈도우의 유니버설 C 런타임 구성 요소입니다. 다만 최신 재배포 패키지가 UCRT 구성 요소도 함께 놓기 때문에, 윈도우 10·11에서는 원인 B의 조치로 두 오류가 함께 해결되는 경우가 많습니다.
Q.재배포 패키지를 다시 깔았는데 왜 그대로일까요?
A.두 가지가 가장 흔합니다. x64만 설치하고 x86을 빼먹은 경우, 그리고 설치 후 재부팅을 하지 않은 경우입니다. 둘 다 확인했는데도 그대로라면 패키지 설치 상태가 손상된 것이므로 제거가 아니라 "수정 → 복구"를 씁니다.
Q.DLL 파일만 내려받아 넣으면 안 되나요?
A.권장하지 않습니다. 이 계열은 ucrtbase.dll과 버전이 맞물린 세트로 동작하기 때문에, 한 개만 다른 버전으로 끼워 넣으면 그 자리는 넘어가도 다음 호출에서 다른 오류가 납니다. 출처가 불분명한 DLL 배포 사이트의 위험도 별개 문제입니다.
Q.게임을 켤 때만 이 오류가 뜨는데 윈도우 문제인가요?
A.다른 프로그램이 전부 정상이라면 윈도우 쪽은 멀쩡할 가능성이 큽니다. 게임 설치 폴더의 redist 또는 _CommonRedist 폴더 안에 있는 런타임 설치 파일을 직접 실행해 보세요. 원인 C에 해당합니다.
함께 보면 좋은 글
같은 런타임 계열에서 자주 이어지는 오류들이다.
런타임 오류 R6034 해결법, 저는 이 순서로 잡았습니다 (C 런타임 라이브러리 오류 완전정리) C 런타임을 잘못된 방식으로 불러올 때 나오는 오류라 원인 C와 맞닿아 있다 · 눌러서 확인하기 → 0xc000007b 오류 원인 4가지와 증상별 해결 순서 (윈도우 10·11 공통) 32비트와 64비트 런타임이 섞였을 때 나오는 대표적인 코드다 · 눌러서 확인하기 → MSVCR100.dll이 없습니다 오류, 재설치까지 해봤지만 결국 이 방법이었습니다 구버전 재배포 패키지를 따로 필요로 하는 프로그램에서 확인할 항목을 정리했다 · 눌러서 확인하기 →참고 문서 · Microsoft Learn — 범용 CRT 배포
참고 문서 · Microsoft 지원 — Windows에서 유니버설 C 런타임 업데이트
참고 문서 · Microsoft Learn — 지원되는 최신 Visual C++ 재배포 가능 패키지 다운로드






