'side by side'에 해당되는 글 1건

  1. 2006/08/03 VS2005으로 작성한 코드가 다른 컴퓨터에서 작동을 안할때.. 2

VS2005으로 작성한 코드가 다른 컴퓨터에서 작동을 안할때..
2006/08/03 11:18
이런 황당할때가...
간단한 코드를 테스트하려고 VS.NET으로 작성한 MFC가 다른 VS.NET이 설치되지 않은 컴퓨터에서 작동하지 않는다.
라이브러리를 복사해도 마찬가지고...

응용 프로그램 구성이 올바르지 않기 때문에 이 응용 프로그램을 시작하지...

혹은 msvcr80.dll 를 찾을수 없다는 에러가 난다면...

해결방법 :

1. VS.NET용 라이브러리
릴리즈 버전은
C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86
디버그 버전은
C:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist
에서 CRT, MFC, ATL에 맞는 dll을 실행파일과 같은 경로명에 복사해주면 된다.
(Microsoft.VC80.*.manifest 도 포함해서)

2. C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86 또는

http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&DisplayLang=ko

자신에 맞는(x86등등) 것을 다운받아서 설치하면 된다.


원인 :

Windows XP에서는 DLL Hell[각주]새로운 프로그램을 설치할때 다른 프로그램이 사용하는 DLL을 덮어 쓰거나 혹은 버전의 불일치로 오는 문제로 기존의 프로그램들이 제대로 동작하지 않는 경우가 있다.[/각주]을 빠져나가려고 Side-by-Side Assembly라는 개념을 만들었다. 이건 여러 버전의 DLL을 동시에 시스템에 존재할 수 있게 해주고, DLL을 사용하는 응용프로그램이 원하는 DLL 버전을 골라서 쓸 수 있도록 해주는 방법이다.
SideBySideAssembly 의 강력한 점은 응용프로그램에서 직,간접적으로 로드하는 모든 DLL이 이 설정의 영향을 받는다는 것이다. 이전에는 응용프로그램이 로드한 DLL에 의해서 간접적으로 로드되는 DLL을 제어할 수 있는 방법이 없었다.

이러한 새로운 방식으로 기존방식대로 VS.NET 라이브러리를 복사하는것으로 끝나지 않고 배포를 위한 별도의 작업이 필요하게 된다.

문제 해결에 대한 페이지
http://www.serious-code.net/moin.cgi/RedistributingVisualCppRunTimeLibrary
http://www.codeproject.com/cpp/vcredists_x86.asp
http://cafe.naver.com/solidcode.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=8
2006/08/03 11:18 2006/08/03 11:18
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • TWEETY 2006/08/04 09:09  댓글주소  수정/삭제  댓글쓰기
    VS 7.0부터 이런 일이 일어났던 거죠?
    괜히 7.0으로 개발했다가...
    한 참을 고생한 기억이 있어요.
    그 놈은 msvcr70.dll이 원인이었죠.
    찾아내는라 죽는 줄 알았음..-_-;;;
    PE?? 그런거 뒤져가지고 알아냈었어요. ㅠㅠ;
    • hongyver 2006/08/04 09:43  댓글주소  수정/삭제
      dll 이 문제가 아니라...
      CRT나 MFC,ATL의 배포라이브러러리를 같이 배포해도 예전같으면 같은 경로명에 있어도 실행이 당연 됐는데...
      그게 안되더라구...
      별도의 배포용 파일(vcredist_x86.exe)를 실행해주어야 한다는 사실...
      귀찮아 졌으...