블루스크린

DLL·런타임 오류

드라이버 문제

게임 오류

윈도우 오류

프로그램 오류

광고자리 · 글 위

0x80004005 오류 원인 4가지와 상황별 해결 순서 (지정되지 않은 오류, 윈도우 10·11)

이 글을 3줄로 요약하면

· 0x80004005는 E_FAIL, Microsoft 문서 표기로 "지정되지 않은 실패"입니다.

· 다른 코드와 달리 원인을 코드 안에 담고 있지 않아, 어디서 떴는지가 사실상 전부입니다.

· 그래서 이 글은 코드가 아니라 상황으로 나눕니다. 판별표에서 자기 상황을 먼저 찾으면 됩니다.

0x80004005는 정확히 무슨 뜻인가

이 코드가 왜 유독 여러 곳에서 뜨는지부터 정리합니다.

0x80004005는 윈도우가 쓰는 결과 코드 체계인 HRESULT의 값 중 하나입니다. Microsoft 공식 목록에서 이 값의 이름은 E_FAIL, 설명은 "Unspecified failure(지정되지 않은 실패)"입니다. 이름 자체가 "실패했는데 무엇 때문인지는 안 적었다"는 뜻입니다.

비교해 보면 성격이 분명해집니다. 0x8007로 시작하는 코드들은 Win32 오류를 감싼 형태라서 뒤 네 자리를 시스템 오류 번호로 되읽을 수 있습니다. 실제로 0x80070005는 액세스 거부, 0x80070057은 잘못된 인수처럼 원인이 코드에 실려 있습니다. 반면 0x80004005는 그 자리에 담긴 정보가 없습니다.

그래서 "0x80004005 해결법"이라는 단일 해법은 존재하지 않습니다. 이 코드는 진단명이 아니라 "원인 불명"이라는 표시에 가깝습니다. 압축 해제에서 뜬 0x80004005와 가상머신에서 뜬 0x80004005는 서로 다른 문제이고, 고치는 자리도 완전히 다릅니다.

그러니 이 글의 순서도 코드가 아니라 상황을 따릅니다. 먼저 어디서 떴는지를 판별표에서 고르고, 해당 원인 섹션만 처리한 뒤, 그래도 남으면 7번에서 이벤트 로그에 남은 진짜 오류를 꺼내 봅니다.

어디서 떴는지로 원인 좁히기

이 코드에서는 "무슨 작업을 하던 중이었나"가 가장 강한 단서입니다.

어디서 떴는가 유력한 원인 먼저 볼 항목
설치·업데이트 도중, 또는 프로그램 폴더에 저장할 때 쓰기 권한 부족 원인 A → 관리자 권한 실행
압축 파일을 풀 때 "지정되지 않은 오류"로 멈춘다 보안 프로그램이 내부 파일 차단 원인 B → 격리 기록 확인
내려받은 실행 파일이 실행 직후 이 코드로 종료된다 차단 해제 안 된 파일·평판 검사 원인 B → 차단 해제
특정 프로그램만, 실행하자마자 매번 같은 코드가 뜬다 런타임 누락·COM 등록 실패 원인 C → 런타임·등록 확인
네트워크 공유 폴더나 NAS에 접근할 때만 뜬다 게스트 연결 차단·정책 원인 D → 계정 지정 접속
가상머신을 켤 때 또는 윈도우 업데이트 중에 뜬다 구성 요소·기능 충돌 7번 → 로그로 실제 원인 확인

"여기저기서 다 뜬다"면 코드가 아니라 공통 조건을 찾습니다

여러 프로그램에서 동시에 이 코드가 보이기 시작했다면, 각 프로그램의 문제가 아니라 같은 날 바뀐 무엇이 원인입니다. 백신 설치, 계정 변경, 정책 적용, 업데이트가 대표적입니다. 이 경우 원인 B와 D를 먼저 봅니다.

원인 A쓰기 권한이 없는 자리에 쓰려고 한다

설치·업데이트·저장 중에 떴다면 여기부터입니다.

프로그램이 C:\Program Files나 레지스트리의 시스템 영역에 쓰려면 관리자 권한이 필요합니다. 권한이 없을 때 어떤 프로그램은 정직하게 "액세스 거부"를 내지만, 어떤 프로그램은 내부 오류를 그대로 흘려보내 0x80004005로 표시합니다. 코드가 뭉뚱그려진 것뿐이지 원인은 평범합니다.

1한 번만 관리자 권한으로 실행해 본다

실행 파일이나 설치 파일을 우클릭 → 관리자 권한으로 실행합니다. 이 상태에서 정상 진행된다면 원인 A가 확정입니다. 설치 파일은 여기서 끝나는 경우가 많습니다.

2매번 관리자로 뜨도록 속성에 고정한다

계속 쓰는 프로그램이라면 실행 파일 우클릭 → 속성 → 호환성 탭에서 관리자 권한으로 이 프로그램 실행을 체크합니다. 바로가기가 아니라 원본 exe에 걸어야 어떤 경로로 실행하든 적용됩니다.

3쓰기 대상 폴더를 권한이 있는 곳으로 옮긴다

설치 경로나 저장 경로를 지정할 수 있는 프로그램이라면 사용자 폴더 아래나 별도 드라이브의 폴더로 바꿉니다. 관리자 권한을 상시로 주는 것보다 필요한 범위만 여는 방식이라 더 안전합니다.

이 방법이 안 통하는 경우

관리자 권한으로 실행해도 같은 코드가 그대로라면 권한 문제가 아닙니다. 파일이 잡혀 있는지를 봐야 하므로 원인 B로 넘어갑니다. 특히 내려받은 파일이라면 그쪽 확률이 높습니다.

이 문제도 확인해보세요 '클래스가 등록되지 않았습니다' 오류, 왜 뜨고 어떻게 없앨까? 0x80004005와 번갈아 나타나는 COM 등록 계열 오류의 판별 순서입니다 · 눌러서 확인하기 →

원인 B백신·SmartScreen이 파일을 붙잡고 있다

압축 해제 실패와 "받자마자 안 켜짐"의 대부분이 이 자리입니다.

보안 프로그램이 파일을 격리하면, 그 파일을 열려던 프로그램 입장에서는 있어야 할 것이 갑자기 사라진 상태가 됩니다. 그 결과를 어떻게 표현할지는 프로그램마다 다른데, 상당수가 0x80004005 "지정되지 않은 오류"로 내보냅니다. 압축을 풀다 중간에 멈추는 증상이 대표적입니다.

1보호 기록에서 방금 격리된 것이 있는지 본다

윈도우 보안의 바이러스 및 위협 방지 → 보호 기록을 열어 오류가 난 시각에 격리 항목이 생겼는지 확인합니다. 파일 이름이 내가 열려던 파일이나 그 안의 파일이라면 원인 B가 확정입니다.

2내려받은 파일의 차단 표시를 해제한다

인터넷에서 받은 파일에는 표식이 붙습니다. 파일 우클릭 → 속성 → 일반 탭 맨 아래에 차단 해제 체크박스가 보이면 체크하고 확인을 누릅니다. 압축 파일은 풀기 전에 이 처리를 해야 안쪽 파일까지 표식이 안 붙습니다.

3필요한 폴더만 검사 제외로 등록한다

신뢰할 수 있는 프로그램인데 반복해서 잡힌다면 바이러스 및 위협 방지 → 설정 관리 → 제외 추가 또는 제거에서 해당 폴더만 등록합니다. 실시간 보호를 통째로 끄지 않습니다. 출처가 불확실한 파일이라면 제외 등록 대신 다운로드를 다시 받는 편이 안전합니다.

경고가 뜨는 파일을 무조건 예외로 등록하지 않습니다

격리는 오탐일 수도 있지만 실제 탐지일 수도 있습니다. 파일을 어디서 받았는지를 먼저 따져 보고, 공식 배포처가 아니라면 예외 등록으로 밀어붙이는 대신 공식 경로에서 다시 받는 쪽을 택합니다.

이 방법이 안 통하는 경우

격리 기록이 없고 차단 표시도 없었다면 보안 계열이 아닙니다. 특정 프로그램에서만 반복된다면 원인 C로 넘어가 실행에 필요한 구성 요소가 갖춰져 있는지 확인합니다.

원인 C런타임이나 COM 등록이 빠졌다

E_FAIL은 원래 COM 계층의 코드라, 이 원인은 구조적으로 이 코드와 가깝습니다.

E_FAIL은 COM 인터페이스가 실패를 알릴 때 쓰는 일반 코드입니다. 그래서 프로그램이 어떤 구성 요소를 만들거나 불러오려다 실패하면 이 값이 그대로 화면까지 올라오는 일이 흔합니다. 이 경우 손볼 곳은 프로그램이 아니라 그 프로그램이 기대하는 구성 요소입니다.

1Visual C++ 재배포 패키지가 x86·x64 모두 있는지 본다

Win + I → 앱 → 설치된 앱에서 Visual C++로 검색합니다. 64비트 윈도우라도 x86과 x64 두 종류가 모두 필요한 프로그램이 많습니다. 한쪽만 있다면 없는 쪽을 Microsoft 공식 배포 페이지에서 받아 설치합니다.

2문제의 DLL이 실제로 있는지 경로에서 확인한다

C:\Windows\System32

이벤트 로그나 오류 창에 DLL 이름이 나왔다면 탐색기 주소창에 위 경로를 넣고 그 이름으로 검색합니다. 32비트 프로그램이라면 C:\Windows\SysWOW64도 함께 봅니다. 양쪽 다 없다면 해당 런타임이 빠진 것입니다.

3등록이 필요한 구성 요소라면 다시 등록한다

regsvr32 "전체 경로\파일이름.dll"

프로그램 안내에 등록 절차가 있는 경우에만 씁니다. 시작 버튼을 우클릭해 터미널(관리자)을 열고 위 형식으로 실행합니다. 아무 DLL에나 시도하지 않습니다. 등록 대상이 아닌 파일에 쓰면 실패 메시지만 늘어납니다.

4시스템 파일이 깨졌는지 점검한다

sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth

여러 프로그램에서 동시에 이 코드가 보인다면 공용 구성 요소가 손상됐을 수 있습니다. 터미널(관리자)에서 위 두 명령을 차례로 실행합니다. 특정 프로그램 하나만 문제라면 이 단계는 효과가 거의 없습니다.

이 방법이 안 통하는 경우

런타임도 다 있고 시스템 파일도 깨끗한데 그대로라면, 문제는 이 PC 안이 아닐 수 있습니다. 접근 대상이 공유 폴더·NAS라면 원인 D로 넘어갑니다.

원인 D네트워크 공유·정책이 접근을 막는다

"어제까지 되던 NAS가 오늘부터 안 된다"의 전형적인 자리입니다.

Microsoft 문서에 따르면 윈도우 10 버전 1709와 윈도우 서버 2019부터 SMB2·SMB3 클라이언트는 게스트 계정으로 원격 서버에 접속하는 것을 기본적으로 허용하지 않습니다. 잘못된 자격 증명 뒤에 게스트로 되돌아가는 동작도 막습니다. 계정 없이 열리던 공유가 어느 날부터 막히는 이유가 여기 있습니다.

같은 문서는 윈도우 11 버전 24H2와 윈도우 서버 2025부터는 SMB 서명이 기본 요구 사항이라, 서명이 성립하지 않으면 게스트 인증과 호환 문제가 생긴다고도 적고 있습니다. 최신 버전으로 올린 뒤 갑자기 막혔다면 이 변화가 배경일 수 있습니다.

1게스트가 아니라 계정을 지정해 접속한다

공유 장비(NAS·공유기·다른 PC)에 사용자 계정과 비밀번호를 만들고, 탐색기에서 연결할 때 그 계정으로 접속합니다. Microsoft가 권장하는 방향도 게스트 허용을 켜는 것이 아니라 계정을 쓰는 것입니다.

2저장된 옛 자격 증명을 지운다

예전에 저장해 둔 계정이 남아 있으면 새 계정을 넣어도 옛 값으로 시도합니다. 제어판의 자격 증명 관리자 → Windows 자격 증명에서 해당 장비 항목을 지운 뒤 다시 연결합니다.

3정책·레지스트리 값이 손대져 있는지 확인만 한다

회사 PC라면 정책으로 잠긴 항목일 수 있습니다. 레지스트리 편집기로 관련 키의 현재 값을 확인하되, 의미를 모르는 값을 바꾸지 않습니다. 값을 손대기 전에는 파일 → 내보내기로 해당 키를 먼저 백업합니다.

게스트 접속 허용은 마지막에도 권장되지 않습니다

Microsoft 문서는 게스트 로그온을 켜는 것이 위조된 서버로 유도되거나 중간자 공격에 노출될 수 있는 보안 위험이라고 명시하고, 켜지 않기를 권장한다고 적고 있습니다. 계정 방식으로 해결되는 상황이라면 이쪽을 택하지 않습니다.

이 방법이 안 통하는 경우

공유와 무관한 상황에서 뜬 코드라면 여기까지로는 좁혀지지 않습니다. 이제 추측을 멈추고 7번에서 로그에 남은 실제 오류를 확인합니다.

진짜 오류를 이벤트 로그에서 찾아내는 법

화면의 0x80004005는 요약본이고, 원본은 대개 로그에 남습니다.

화면에 뜨는 코드는 여러 단계를 거치며 뭉개진 마지막 값입니다. 중간 단계에서 나온 구체적인 오류는 대부분 이벤트 로그에 그대로 남습니다. 이 섹션이 이 글에서 가장 확실한 단계입니다.

1오류가 난 시각의 응용 프로그램 로그를 연다

eventvwr.msc

Win + R에 위 명령을 넣고 Windows 로그 → 응용 프로그램에서 그 시각의 빨간 오류 항목을 클릭합니다. 하단 일반 탭의 오류 모듈 이름과 예외 코드가 다음 행선지를 정해 줍니다.

2모듈 이름으로 원인 섹션을 되짚는다

모듈 이름이 런타임 계열 DLL이면 원인 C, 보안 제품의 파일이면 원인 B, 네트워크 관련 구성 요소면 원인 D로 돌아갑니다. 이름이 프로그램 자체 파일이면 그 프로그램의 로그·설치 폴더를 봅니다.

3설치 중에 났다면 설치 로그를 함께 본다

설치 프로그램은 대개 임시 폴더에 자체 로그를 남깁니다. Win + R에 %temp%를 넣어 폴더를 열고, 수정 날짜가 방금인 로그 파일을 열어 마지막 오류 줄을 확인합니다. 여기에는 코드가 아니라 문장으로 적혀 있는 경우가 많습니다.

이 순서의 목적은 하나입니다. 0x80004005라는 이름 없는 코드를, 이름이 있는 오류로 바꾸는 것. 모듈 이름 하나만 확보해도 검색어가 달라지고, 해결 경로가 그때부터 구체적으로 열립니다.

자주 묻는 질문

이 코드에서 특히 자주 갈리는 판단들만 모았습니다.

Q.0x80004005 하나만 보고 원인을 알 수는 없나요?

A.없습니다. Microsoft 목록에서 이 값의 설명 자체가 "지정되지 않은 실패"입니다. 원인을 담지 않도록 정의된 코드라, 어디서 떴는지가 유일한 단서입니다. 그래서 2번 판별표가 이 글의 출발점입니다.

Q.0x80070005와는 어떻게 다른가요?

A.0x80070005는 액세스 거부라는 원인이 코드에 실려 있습니다. 반면 0x80004005는 그 자리에 아무 정보가 없습니다. 증상이 비슷해 보여도 앞쪽은 권한부터 보면 되고, 뒤쪽은 상황부터 나눠야 합니다.

Q.압축을 풀 때만 이 오류가 납니다.

A.보안 프로그램이 압축 안의 파일 하나를 잡아간 경우가 많습니다. 원인 B의 보호 기록과 차단 해제를 먼저 확인하세요. 그다음 후보는 대상 폴더 쓰기 권한(원인 A)과 내려받다 만 손상 파일입니다.

Q.가상머신을 켤 때 이 코드가 뜨는데 같은 원인인가요?

A.코드만 같을 뿐 다른 문제입니다. 가상화 프로그램은 실패 사유를 자체 로그에 따로 남기므로, 7번의 이벤트 로그와 함께 그 프로그램의 로그 창을 확인해야 실제 원인이 나옵니다.

Q.윈도우를 재설치하면 확실히 해결되나요?

A.원인 C처럼 시스템 구성 요소 문제라면 사라지지만, 원인 D(공유·정책)는 상대 장비 쪽 조건이라 재설치해도 그대로입니다. 재설치 전에 7번으로 모듈 이름을 확보하는 편이 훨씬 경제적입니다.

Q.레지스트리 값을 바꾸라는 안내를 따라도 되나요?

A.어떤 키를 왜 바꾸는지 확인한 뒤에만 합니다. 특히 보안 동작을 완화하는 값은 증상은 없애도 위험을 남깁니다. 바꾸기 전에 파일 → 내보내기로 그 키를 백업해 두고, 효과가 없으면 되돌립니다.

함께 보면 좋은 글

0x80004005 옆에서 자주 같이 나오는 오류들입니다.

0xc0000906 오류 해결 – 프로그램이 백신에 차단되어 실행 안 될 때 원인 B가 다른 코드로 나타났을 때의 처리 순서입니다 · 눌러서 확인하기 → 윈도우 업데이트 오류 0x80070005 액세스 거부 해결 순서 원인이 코드에 실려 있는 경우와 비교하면 이해가 빨라집니다 · 눌러서 확인하기 → 지정된 모듈을 찾을 수 없습니다(오류 126), 원인 4가지와 각각의 해결법 원인 C에서 DLL 이름이 확인됐다면 이어서 보면 좋습니다 · 눌러서 확인하기 →
확인 환경 · 윈도우 11 24H2 / 윈도우 10 22H2 기준, 2026년 8월 확인
참고 문서 · Microsoft Learn — 일반적인 HRESULT 값 (E_FAIL 0x80004005)
참고 문서 · Microsoft Learn — SMB2·SMB3에서 안전하지 않은 게스트 로그온 사용

광고자리 · 글 아래