비주얼 스튜디오를 통한 툴 혹은 게임등을 제작한뒤 개발자 컴퓨터에서 아무런 문제 없이 동작하던 프로그램이 테스트를 위해 복사 혹은 설치형태로 프로그램을 배포한뒤 만나게 되는 문제가 바로 재배포 문제인데요...

이전에 어렵사리 맞춰놓은 재배포 패키지로 작업하던 툴이 시간이 흐른뒤 수정작업을 하고나니 다른 컴퓨터에서 실행이 되지 않는다고하면.. 엄청난 스트래스가!! 아무튼 아직도 고민중인 내용이지만 일단 이전 내용과 지금 찾아서 테스트 하는 내용을 정리 해본다.

1. 외부 라이브러리의 경우 항상 같은 컴파일 옵션 유지.
2. 특정 버전(최신 현재 개발 컴퓨터에 깔린 최신 버전을 말함)의 재배포 프로그램을 사용하도록 강제하는  define 이 있다.

#define _BIND_TO_CURRENT_CRT_VERSION 1
#define _BIND_TO_CURRENT_ATL_VERSION 1
#define _BIND_TO_CURRENT_MFC_VERSION 1
#define _BIND_TO_CURRENT_OPENMP_VERSION 1

각각 crt atl mfc openmp 등등 해당하는 재배포 부분을 최신의 것을 사용하게 하는것이도 이것 전체를 하나의  define 으로도 설정 가능하다

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1

이러한 define 을 보통 외부 라이브러리들과 배포할 프로그램 프로젝트 설정에 선언해 놓으면 일률적으로 하나의 버전을 사용하는 라이브러리/프로그램이 만들어 진다고 한다.


하지만!!!


해당 부분을 적용해 본 결과 최신의 재배포 패키지에 대한 종속성은 변경 되었지만... 이전 버전이 하나 추가되어 이상한 상태로 현재 해결이 안되고 있다. (물론 windows 7 에서는 별다른 이상없이 이전 재배포 패키지가 설치된 pc 에서 문제가 없었지만 xp 에서 실행이 안되는 문제가 있음)


그리고 구글님의 도움으로 외국사이트에서 찾은 자세한(?) 글이 있었는데 그것은 회사에... 곧 추가하도록 하겠음.



근데... 왜 갑자기 다시 재배포 문제가 발생한 것인지... 아마도 범인은 자동 업데이트?! 

구글링을 통해 알아본 내용은 몇가지 조건에 따라 나타나는 증상까지 설명이 되어 있어서 찬찬히 보고 적용해 보기로 하고...

msdn 에서 한글로 번역해 주신 참고 주소 추가!~

http://msdn.microsoft.com/ko-kr/library/ms235299(v=vs.90).aspx  

하지만 잘 모르겠다-ㅅ- 뭔가 둥글둥글하게 지나가는거 같기도 하고 아! 이거야 하는 느낌이 날정도로 살펴보진 않았으니.. 




기존에 배포하던 툴의 manifest 정보. ( 9.0.21022 에 해당하는 vcredist_x86 을 함께 배포해 문제가 해결되었었다. )

<?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.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly> 



새로 컴파일되어 생성된 manifest 정보. ( 9.0.30729.6161 가 추가되었다. 음.. 해당 vcredist_x86도 함께 제공 했던거 같은데 실행에 문제가 있음.)

<?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.CRT" version="9.0.30729.6161" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! define 추가를 잘못했었네!? 일단 되나 확인부터
_BIND_TO_CURRENT_VCLIBS_VERSION=1 이거다

_BIND_TO_CURRENT_VCLIBS=1 <-- 왜 이래놨을까;;
Posted by ngcbbs
,