Microsoft Visual C++프로그램의 배치 방법

6020 단어 C++배치 하 다.
1.Microsoft Visual C++6.0 으로 컴 파일 된 프로그램 이나 Windows 2000/NT/ME/98 시스템 에서 MSVCRxx.DLL 파일 을 단순히 응용 프로그램 디 렉 터 리 나 system 32 디 렉 터 리 로 복사 하면 됩 니 다.
2.Visual Studio 2005 이상 에서 컴 파일 된 프로그램 으로 Windows XP 및 이상 시스템 에 발 표 된 DLL 로 인 한 설정 문제(DLL hell)를 줄 이기 위해 C 와 C++가 실 행 될 때 병렬(Side-by-Side)프로그램 집합 으로 이 루어 집 니 다.MSVCRxx.DLL 복사 만으로 비 개발 환경 에서 정상적으로 프로그램 을 실행 할 수 없 으 므 로 하나의 목록(manifest)을 통 해 CRT DLL 을 불 러 와 야 합 니 다.C 런 타임 라 이브 러 리 를 불 러 올 때 이 목록 이 없 으 면 R6034 이상 이 발생 합 니 다.CRT DLLs 가 System 32 디 렉 터 리 가 아 닌 WinSXS(Windows Side-by-Side)에 있 는 이유 다.
EXE 와 DLL 파일 에는 하나의 manifest 파일 이 있 는데 그 안에 의존 관 계 를 설명 하고 Visual Studio 2005 로 컴 파일 하면 실행 가능 한 파일 과 같은 이름 의 manifest 파일 이 자동 으로 생 성 됩 니 다.예 를 들 어 app.exe.                // 실행 가능 한 파일 app.exe.manifest    // dll 의존 파일 은 일반적으로 EXE 와 DLL 의 manifest 파일 을 EXE 와 DLL 파일 에 삽입 하고 외부 에 설 치 된 manifest 는 삭제 할 수 있 습 니 다.예 를 들 어 mt.exe/nolog/manifest".\app.exe.manifest"/outputresource:".\app.exe";1 EXE 파일 의 맨 뒤에 있 는 값 은 1 입 니 다.DLL 파일 의 값 은 2microsoft Visual C++런 타임 라 이브 러 리 DLL 파일 에 manifest 파일 이 삽입 되 어 있 지 않 기 때문에 외부 manifest 파일 이 필요 합 니 다.Visual Studio 2005 의 manifest 이름 은 Microsoft.VC80.CRT.manifest 이 고 Visual Studio 2008 의 manifest 이름 은 Microsoft.VC90.CRT.manifest 입 니 다.따라서 Microsoft.VC80.CRT.manifest,MSVCR80.dll,MSVCP80.dll,MSVCM80.dll 등 네 개의 파일 을 응용 프로그램 디 렉 터 리 에 복사 해 야 합 니 다.예 를 들 어 C:\\Test\app.exec:\Test\MSVCR80.dlC:\Test\MSVCP80.dlC:\Test\MSVCM80.dlC:\\Test\Microsoft.VC80.CRT.Manifest 또는 Microsoft 공식 제안 을 사용 합 니 다.예 를 들 어:WinXP 이상 C:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Microsoft.VC80.CRC\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Microsoft.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\C:\Test\msvcm80.dll 상기 방법 으로 실행 할 수 없다 면,Microsoft Visual C++가 시스템 에 여러 버 전의 DLL 이 있 음 을 설명 합 니 다.프로그램 은 발 표 된 Microsoft Visual C+DLL 과 일치 하지 않 습 니 다.예 를 들 어 app.Manifest 파일 은 Microsoft.VC90.CRT 의 DLL 을 요구 하고 버 전 은 9.0.21022.8

<?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'/>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT'version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'/>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls'version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'/>
    </dependentAssembly>
  </dependency>
</assembly>
입 니 다.
Microsoft.VC90.CRT.manifest 파일 은 Microsoft.VC90.CRT 를 가리 키 지만 버 전 은 9.0.30729.1 입 니 다.

<?xml version="1.0"encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable></noInheritable>
    <assemblyIdentity type="win32" name="Microsoft.VC90.CRT"version="9.0.30729.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    <file name="msvcr90.dll" hashalg="SHA1" hash="9785b1c493deb5b2134dc4aef3719cee207001bc"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>VF5ECUAHPV7EnUf+/UIXMPizPvs=</dsig:DigestValue></asmv2:hash></file><file name="msvcp90.dll" hashalg="SHA1" hash="0f6bbf7fe4fb3fca2cb5b542eca1a1cad051f01c"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>3Wg+StVMq2uhx7POnAkl2w4dDmY=</dsig:DigestValue></asmv2:hash></file><file name="msvcm90.dll" hashalg="SHA1" hash="7f3290ab2b7444c2b4a9b1fedfdb16466d7a21bb"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>/YfRn7UQENzdMeoMHxTgdRMiObA=</dsig:DigestValue></asmv2:hash></file>
</assembly>
양자 버 전이 일치 하지 않 아 프로그램 이 실행 되 지 않 습 니 다.해결 방법 은 발표 프로그램 이 요구 하 는 9.0.21022.8 버 전의 Microsoft.VC90.CRT 파일 입 니 다.
3.또 하나의 간단 한 방법 은 배치 해 야 할 기계 에 Visual C+2008 Redistributable Package(x86)또는(x64)를 설치 하 는 것 이다.
주:
Dependency Walker(dependency.exe)로 발표 할 EXE 를 열 고 왼쪽 상단 목록 에서 시스템 에 의존 해 야 할 DLL 을 찾 습 니 다.

좋은 웹페이지 즐겨찾기