2010. 4. 27. 13:39

"응용 프로그램 구성이 올바르지 않기 때문에..." 해결 방안



예전에 http://todayis.tistory.com/148 에 "응용 프로그램 구성이 올바르지 않기 때문에 이 응용 프로그램을 시작하지 못했습니다. 이 문제를 해결하려면 응용 프로그램을 다시 설치하십시오." 라는 주제에 대해서 이야기 한 적이 있었다.

왠만한 경우 'vcredist_x86.exe' 파일을 설치함으로 해결 되었던 것으로 기억이 되는데.. 왠지 이번에 만든 프로그램의 경우 전혀 먹히질 않는다.. -_-;

http://kldp.org/node/95859 의 대글을 보니 이런 부분이 있다.

좀 더 정확히 얘기하면, Side-by-Side Assembly가 없어서 발생하는 문제이죠.

Visual Studio 2005부터는 공용 DLL을 System32라는 곳에 몰아서 보관하지 않고, WinSxS라는 공용 어셈블리 저장공간에 별도로 저장하게 됩니다. 이렇게 저장하는 이유는 버전 충돌을 막기 위해서이고요.

이러한 공용 어셈블리의 위치 정보는 모듈의 Menifest에 저장되어서 참조되게 됩니다.

그래서 사용하는 DLL을 단순히 복사하셔서는 안되고요. cynicjj님 말씀처럼 재배포 패키지를 이용해서 공용 DLL들을 설치하셔야 합니다. (Menifest는 Windows XP이상에서만 사용할 수 있기 때문에, Windows2000에서는 그냥 System32나 어플리케이션이 있는 폴더에 DLL들을 같이 복사해 주셔야 하고요.)

참고로 그런에 에러가 나왔을때, Dependency Walker 프로그램을 이용하면, 무슨 DLL이 없는지 쉽게 확인하실 수 있습니다.


이런 비슷한 내용을 본적이 있는데..
http://www.serious-code.net/moin.cgi/RedistributingVisualCppRunTimeLibrary

위의 사이트를 보니
실행 파일 자체와 실행 파일에서 액세스하는 DLL들에 대한 manifest 파일들을 private assembly로서 같이 배포하면, 에러를 피할 수 있다. 

라고 한다. 

위의 문제를 해결하기 위해서 "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86" 를 찾아보면 "Microsoft.VC80.CRT" 와 "Microsoft.VC80.MFC" 폴더가 존재한다.
Win32API의 경우 "Microsoft.VC80.CRT", MFC의 경우 "Microsoft.VC80.MFC" 디렉토리 내의 파일들과 함께 실행파일을 제공하면 될 듯 하다.

실행파일에 대한 manifest 파일도 필요하다고 하는데.. 그 파일 없이도 일단 실행이 되는것은 같은데..
참고로 실행파일에 대한 manifest 파일은 프로젝트 관련 디렉토리 내의 Debug 혹은 Release 디렉토리 내에 존재한다.