애드소프트 기술블로그

개발·서버 운영 실무 기록

애드소프트 박재호입니다. IIS·ASP.NET 웹 서비스와 메일서버를 직접 운영하고, Unity 게임과 데스크톱 앱을 만들며 겪은 문제와 해결 과정을 기록합니다.

최신 글

StartMenuExperienceHost.exe 는 무엇인가 — ShellExperienceHost·TextInputHost·sihost 와 '일시 중단됨'의 정체

StartMenuExperienceHost.exe 는 시작 메뉴 화면을 그리는 Windows 기본 프로세스이고, ShellExperienceHost·TextInputHost·sihost 도 알림·입력 패널·셸 기반을 나눠 맡는 정상 프로세스다. 실제 PC 에서 경로와 서명, 부모, 메모리, 스레드 39개가 모두 멈춰 있던 '일시 중단됨' 상태를 확인하고 시작 메뉴가 안 열릴 때 볼 순서를 정리했다.

0x80070005 "액세스가 거부되었습니다" — 오류 코드 읽는 법과 어디서 막혔는지 찾기

0x80070005 는 Win32 오류 5번 ERROR_ACCESS_DENIED 를 HRESULT 로 감싼 값이다. 앞의 0x8007 이 "Win32 오류"라는 표시라서 다른 0x8007xxxx 코드도 같은 방법으로 풀린다. 내 PC 이벤트 로그에 실제로 남은 0x80070005 를 찾아 어느 작업이 어떤 권한에 막혔는지 따라가고, 업데이트·스토어·설치에서 볼 때 확인할 순서를 정리했다.

SearchHost.exe 와 SearchIndexer.exe 는 무엇인가 — 시작 메뉴 검색 창과 Windows Search 색인, CPU·디스크가 높을 때

SearchHost.exe 는 작업 표시줄·시작 메뉴의 검색 창을 그리는 앱이고, SearchIndexer.exe 는 Windows Search 서비스가 파일·메일 색인을 만드는 프로세스다. 이름은 비슷해도 하는 일이 다르다. 실제 PC 에서 SearchHost 와 그 뒤의 WebView2 6개, 그리고 '사용 안 함'으로 되어 있던 WSearch 서비스를 확인하고, 색인 중 CPU·디스크가 높을 때 볼 곳을 정리했다.

VCRUNTIME140.dll·MSVCP140.dll 이(가) 없어 코드 실행을 진행할 수 없습니다 — Visual C++ 재배포 패키지 확인과 x86·x64

VCRUNTIME140.dll·MSVCP140.dll 이 없다는 창은 Visual C++ 재배포 패키지(2015~2022 통합, 버전 14.x)가 없거나 비트가 맞지 않다는 뜻이다. 사본으로 같은 창을 띄워 보고, 레지스트리 VC\Runtimes 와 Uninstall 키로 설치 버전을 확인하는 법, x86·x64 를 둘 다 깔아야 하는 이유, DLL 다운로드 사이트를 피해야 하는 까닭을 정리했다.

explorer.exe(Windows 탐색기) CPU 높음·멈춤 — 작업 표시줄까지 맡는 셸, 다시 시작하는 법과 셸 확장 찾기

explorer.exe 는 파일 탐색기 창뿐 아니라 작업 표시줄과 바탕 화면까지 그리는 Windows 셸 프로세스다. 그래서 멈추면 화면 전체가 굳는다. 실제 PC 에서 explorer.exe 의 메모리·핸들·스레드와 자식 프로세스, 오른쪽 클릭 메뉴에 붙은 셸 확장 34개를 확인하고, 작업 관리자의 '다시 시작'과 원인 DLL 을 찾는 순서를 정리했다.

0xc000007b — 응용 프로그램을 제대로 시작하지 못했습니다, 64비트 프로그램과 32비트 DLL 이 섞였을 때

0xc000007b 는 STATUS_INVALID_IMAGE_FORMAT, 프로그램이 비트가 다른 DLL 을 불러왔다는 뜻이다. 64비트 프로그램 사본 옆에 32비트 DLL 을 두어 같은 오류 창을 띄워 보고, PE 헤더의 Machine 값(0x14c, 0x8664)을 PowerShell 로 읽어 DLL 비트를 확인하는 법, System32 와 SysWOW64 가 이름과 반대인 이유를 정리했다.

csrss.exe·smss.exe·wininit.exe·winlogon.exe·services.exe 는 무엇인가 — 부팅 순서와 부모 관계, csrss 가 두 개인 이유

csrss.exe, smss.exe, wininit.exe, winlogon.exe, services.exe 는 Windows 가 부팅할 때 가장 먼저 뜨는 핵심 프로세스이고 끌 수 없는 것이 정상이다. 실제 PC 에서 운영 체제 시작 후 9초 안에 이들이 뜬 순서, 세션 0과 1로 갈린 부모 관계, csrss 가 두 개인 이유, services.exe 아래 151개 자식, 가짜를 구별하는 기준을 정리했다.

0xc0000022 — 응용 프로그램을 제대로 시작하지 못했습니다, 원인은 DLL 권한일 때가 많다

0xc0000022 는 STATUS_ACCESS_DENIED, 프로그램이 시작하면서 불러오는 DLL 을 읽을 권한이 없다는 뜻이다. 프로그램 사본 옆 DLL 의 권한을 막아 같은 오류 창을 직접 띄워 보고, icacls 로 권한을 읽는 법, 읽을 수 없는 파일을 찾는 PowerShell 명령, 보안 프로그램 차단을 포함한 해결 순서를 정리했다.

lsass.exe(Local Security Authority)는 무엇인가 — LsaIso.exe 와 Credential Guard, CPU·메모리가 높을 때, 가짜 구별

lsass.exe 는 Windows 로그인과 자격 증명을 맡는 로컬 보안 기관 프로세스이고, 정상이라면 PC 에 딱 하나만 있다. 실제 PC 에서 부모 wininit.exe, 보호 수준 4로 시작된 기록, 옆에 붙은 LsaIso.exe 와 Credential Guard 구성을 확인하고, CPU·메모리가 높을 때 볼 곳과 가짜를 구별하는 기준을 정리했다.

WmiPrvSE.exe(WMI Provider Host) CPU 가 높을 때 — 누가 WMI 에 묻는지 이벤트 로그로 찾기

WmiPrvSE.exe 는 WMI 질의에 답하는 공급자를 담는 Windows 프로세스다. CPU 가 높을 때 범인은 대개 이 프로세스가 아니라 WMI 에 계속 묻는 다른 프로그램이다. 실제 PC 에서 세 개의 WmiPrvSE 와 부모, WMI-Activity 로그 4일치 1,527건을 열어 공급자와 질의한 프로세스를 찾는 방법을 정리하고 연재를 마무리한다.