programming2009. 4. 6. 18:53

VC80(VS2005) 부터 DLL Hell 문제를 해결하기 위해  배포방식이 조금 변경되었다.
DLL Hell 은 간단히 정리하면 하나의 PC 에 하나의 DLL 만 존재 할수 밖에 업어서 생기는 문제이다.
어떤 문제가 생기나 ? 제일 많이 발생하는 문제는 DLL 의 버전 문제이다. 한 PC 에 하나의 DLL 만 설치되면 버전 충돌문제가 발생할수 있다. 이런 문제를 해결하기 위해 같은 DLL 이라도 버전별로 설치해 놓고 쓰고 싶다는 얘기 이다.

하여튼 각설하고 그럼 어떻게 배포 해야 하나 ?

1, VC80 으로 배포 하면 기본적으로 Manifest 파일이 생성된다.  ("./Release/Test.exe.intermediate.manifest")

2, Manifest 파일을 열어본다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

3, Test.exe 가 실행되기 위해서는 VC90.DebugCRT 파일이 필요하단 말이당. (MFC 로 만들면 몇가지 더 생긴다.)
"C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT"
이경로에 파일을 복사해서 Test.exe 파일가 같이 놓으면 실행하는데 문제가 없을 것이다.

4, 참고로 시스템에 설치되는 Manifest 파일과 DLL 들은 "C:\WINDOWS\WinSxS" 안에 있으니 배포할때 참고 하면되겠다. 

Posted by 상현달