기본 콘텐츠로 건너뛰기

라벨이 Windows인 게시물 표시

[OS] Windows 에서 MSVCR90.dll 오류 발생 대처하기

MSVCR 관련 오류 “MSVCR (Microsoft Visual C++ Runtime)” 관련 오류는 어플리케이션을 직접 개발해서 배포하거나 아니면 다른 어플리케이션을 설치해서 사용할 때 흔히 발생하는 오류 중에 하나기 때문에 큰 문제는 없다. 그러나 조치를 취했음에도 불구하고 동일한 오류가 계속 반복되는 경우라면 상황을 잘 파악해 봐야 한다. 일반적인 발생 원인 거의 대부분은 MSVCR 라이브러리가 설치되지 않았기 떄문에 발생한다. 주로 볼 수 있는 오류 상황은 다음과 같다. 설치가 되지 않은 상황이거나 아니면 버전 또는 아키텍처와 관련되어 라이브러리를 로드할 수 없는 경우도 존재한다. 오늘 이 게시글을 작성하는 이유는 설치도 로드도 모두 잘 되었지만 사용 중에 오류가 발생하면서 어플리케이션이 종료가 되는 경우도 있기 때문이다. 이 경우는 아마도 C++ 코드 작성에서 메모리 처리를 하면서 OS 특성을 타는 부분일 것으로 예상된다. 발생한 오류는 예외 코드 0xc0000417 이며 발생한 모듈은 MSVCR90.DLL 이다. 좀 더 구체적인 상항은 덤프된 정보를 분석해 봐야하지만 일반적인 해결 방법을 적용해 보도록 한다. 해결 방법 해결 방법은 구체적인 오류 발생 정보가 없는 경우라면 아래와 같이 단순하게 적용해 볼 수 있다. 설치가 안되었거나 로드할 수 없는 경우 설치가 안된 상태이거나 설치에 문제가 있거나 아니면 다른 버전과의 문제가 있다면 프로그램 및 기능 을 통해서 기존에 설치되어 있는 것을 제거한 후에 재 부팅해서 다시 설치하는 방식을 사용하면 된다. 설치를 해서 필요로 하는 버전과 아키텍처가 맞는지를 확인해 봐야 한다. 필요하다면 다른 버전의 배포판도 검토해야 한다. Microsft Visual C++ 2008 SP1 재배포 가능 패키지 - 32bit (x86) Microsft Visual C++ 2008 SP1 재배포 가능 패키지 - 64bit (x64) 설치 및 로드 후 문제가 있는 경우 설치도 모두 되어 있고, 정상적으로 어

[ TIP ] OS 에 다른 Language Pack 이 설치된 경우의 코드 페이지 찾기

C# 에서 Code Page 를 찾는 방법은 여러 가지가 존재하지만 그중에서 좀 많이 사용되는 방식은 아래와 같다. Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage Encoding.Default.CodePage 그런데 영문 OS 를 설치해 놓고 한글 Language Pack을 설치하여 한글을 사용하는 경우는 위의 두 가지 방식으로는 제대로된 Code Page를 얻을 수 없다. 테스트를 해 본 결과 모두 1521 을 반환한다. Windows 의 Code Page 리스트는 여기 를 참고하면 알 수 있다. 그런데 실제로 해당 PC 에서 Command 창을 열고 chcp 명령을 치면 한글 Language Pack을 쓰고 있기 때문에 "949"로 나온다. 실제 영문 OS 에서는 chcp 를 치면 437 이 나온다. 437 이라는 코드는 MS-DOS 의 미국 코드 페이지 번호를 의미한다. 물론 949 는 한글 코드 페이지를 의미한다. 그럼 949 코드를 얻을 수 있는 방법은 뭘까? 영문 OS 에 한글 Language Pack 을 설치한 PC 에서는 437 대신에 949 가 나온다. 그리고 Culture 나 Encoding 을 통해서는 1521 이 나온다. 그럼 949 는 뭘 기준으로 나온 값일까???? 혹시나 해서 UI 와 관련된 UICulture 를 검사해 봐도 1521 이 나온다. 여기서 힌트가 될 수 있는 것이 cmd 를 실행해서 chcp 를 한 것이다. 즉, 콘솔로 출력이 되는 상황에서 코드 페이지를 검사하면 되지 않을까??? 하는 엉뚱한 생각이 들었다.... 바로 테스트... Console.OutputEncoding.WindowsCodePage 쩝!!! 949 나온다 -_-;;; 나름대로 짱구를 굴려 본 것이 OS 자체는 영문이기 때문에 기본 Culture는 제어판에서 변경하지 않는 한은 영문일 것이고, 기본 Encoding 도 영문