2011-09-22 2 views
2

Windows XP에서 로컬 응용 프로그램 디렉터리에 msvcp90.dll, msvcr90.dllMicrosoft.VC90.CRT.manifest과 함께 실행되는 .exe가 있습니다. 또한 Visual C++ 2008 SP1 Redistributable Package에 의해 설치된 C:\WINDOWS\WinSxS\Policies에이 .dll에 대한 정책 파일이 있습니다. 이 정책 파일을 삭제하고 로컬 디렉토리의 app config 파일을 대신 사용하고 싶습니다. 정책 파일은 다음과 같습니다로컬 구성 파일로 Microsoft.VC90.CRT WinSxS 정책 파일 바꾸기

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity type="win32-policy" name="policy.9.0.Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/> 
    <dependency> 
     <dependentAssembly> 
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/> 
      <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30729.1"/> 
      <bindingRedirect oldVersion="9.0.30201.0-9.0.30729.1" newVersion="9.0.30729.1"/> 
     </dependentAssembly> 
    </dependency> 
</assembly> 

내 설정 파일은 다음과 같습니다

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
      <dependentAssembly> 
       <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/> 
       <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30729.1"/> 
       <bindingRedirect oldVersion="9.0.30201.0-9.0.30729.1" newVersion="9.0.30729.1"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

정책 파일 대신 설정 파일을 사용할 때 종속성 워커 나란히 오류를보고 - 무슨 잘못? 또한 설정 파일의 이름을 <application>.exe.config 또는 Microsoft.VC90.CRT.config으로 지정해야합니까?

(정책 파일을 사용하는 경우 명확히하기 위해, 오류가 표시되지 않습니다. 그러나, 여기에 클라이언트 재배포 가능 패키지를 설치 할 수 없습니다.

MSDN docs 상태를 앱 설정 파일이 다른 사용할 수있는 응용 프로그램을 리디렉션 할 수 있음 동일한 어셈블리 버전 (per-application configuration)을 사용하고 필요에 따라 기존 정책 (게시자 구성) 파일을 덮어 쓸 수 있음을 확인했습니다. 따라서 로컬 응용 프로그램 구성 파일을 사용할 수 있어야하며 위 파일의 내용이 누락되었거나 올바르지 않습니다.)

+0

의도 한 파일을 사용하여 오류를 제거하십시오. –

답변

0

보안상의 이유로 c 런타임을이 방법으로 리디렉션 할 수 없다는 것을 알고 있습니다. 귀하의 옵션은 프로젝트에 런타임을 정적으로 구축하거나 사이드 바이 사이드 시스템없이 응용 프로그램 디렉토리에서 DLL을로드하는 것입니다.

2

구성 데이터는 <runtime> 노드 아래에 있습니다. 대신 <windows> 노드 아래에 있어야합니다.

바인딩 리디렉션을 포함하는 응용 프로그램 구성 파일을 운송하는 것이 매우 바람직하지 않으며 관리자가 관리하는 컴퓨터의 appcompat 문제를 처리하는 시스템 관리자에게주의해야합니다. 응용 프로그램 개발자는 대신 자신이 의존하는 CRT의 특정 버전의 최신 개정판을 사용하도록 응용 프로그램을 제작하고 해당 버전과 함께 제공되는 기본 전역 정책을 사용해야합니다.

실제로 Windows 2003부터 응용 프로그램 구성 파일에서 바인딩 리디렉션을 사용하면 응용 프로그램 호환성 데이터베이스에 항목이 필요합니다.

관련 문제