문제

Windows 7 X64에서 vs2008 SP1A (9.0.30729.4148)가있는 응용 프로그램 빌드가있어 XP에서 시작하지 않으려 고합니다.

메시지는입니다 The application failed to initialize properly (0x80000003). Click on OK to terminate the application.. 나는 확인했다 depends.exe 그리고 그것을 발견했습니다 msvcr90.dll 로드하려고합니다 FlsAlloc Kernel32.dll- 및 Flsalloc에서 Vista에서만 시작할 수 있습니다. 나는 그것이 응용 프로그램에서 사용하지 않는다고 확신합니다.

문제를 해결하는 방법?

SXS 패키지는 이미 대상 시스템에 설치되어 있습니다. 실제로 9.0 SXS (초기 릴리스, SP1 및 SP1+보안 패치)의 3 가지 버전이 모두 있습니다.

응용 프로그램은 다음과 같이 컴파일됩니다 _BIND_TO_CURRENT_VCLIBS_VERSION=1

또한 올바른 대상 Windows 버전을 정의했습니다 stdafx.h

 #define WINVER 0x0500
 #define _WIN32_WINNT 0x0500

매니페스트 파일

<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.30729.4148" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" /> 
  </dependentAssembly>
  </dependency>
 <dependency>
 <dependentAssembly>
  <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" version="9.0.30729.4148" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" /> 
  </dependentAssembly>
  </dependency>
</assembly>

결과에 따라 다릅니다

주소 0x00400000에서 "c : program files app app.exe"(프로세스 0xa0)를 시작했습니다. 성공적으로 연결된 모듈. 주소 0x7c900000에서 "c : windows system32 ntdll.dll"로드. 성공적으로 연결된 모듈. 주소 0x7c800000에서 "c : windows system32 kernel32.dll"로드. 성공적으로 연결된 모듈. 주소 0x785E0000에서 "c : program files app mfc90.dll"로드. 성공적으로 연결된 모듈. 주소 0x78520000에서 "c : program files app msvcr90.dll"로드. 성공적으로 연결된 모듈. 주소 0x7e410000에서 "c : windows system32 user32.dll"로드. 성공적으로 연결된 모듈. 주소 0x77F10000에서 "c : windows system32 gdi32.dll"로드. 성공적으로 연결된 모듈. 주소 0x77F60000에서 "C : Windows System32 ShlWapi.dll"로드. 성공적으로 연결된 모듈. 주소 0x77dd0000에서 "c : windows system32 advapi32.dll"로드. 성공적으로 연결된 모듈. 주소 0x77e70000에서 "C : Windows System32 rpcrt4.dll"로드. 성공적으로 연결된 모듈. 주소 0x77fe0000에서 "c : windows system32 secur32.dll"로드. 성공적으로 연결된 모듈. 주소 0x77c10000에서 "c : windows system32 msvcrt.dll"로드. 성공적으로 연결된 모듈. 주소 0x5d090000에서 "c : windows system32 comctl32.dll"로드. 성공적으로 연결된 모듈. 주소 0x76380000에서 "c : windows system32 msimg32.dll"로드. 성공적으로 연결된 모듈. 주소 0x7c9c0000에서 "c : windows system32 shell32.dll"로드. 성공적으로 연결된 모듈. 주소 0x77120000에서 "c : windows system32 eleaut32.dll"로드. 성공적으로 연결된 모듈. 주소 0x774E0000에서 "C : Windows System32 Ole32.dll"로드. 성공적으로 연결된 모듈. EntryPoint에 도달했습니다. 모든 암시 적 모듈이로드되었습니다. "c : program files app msvcr90.dll"에서 dllmain (0x78520000, dll_process_attach, 0x0012fd30). getProcAddress (0x7c800000 [C : Windows System32 Kernel32.dll], "flsalloc") "C : Program Files App MSVCR90.dll"에서 호출 된 0x78543ACC 및 리턴 NULL. 오류 : 지정된 절차를 찾을 수 없습니다 (127). getProcAddress (0x7c800000 [C : Windows System32 Kernel32.dll], "flsgetValue") "C : Program Files App App MSVCR90.dll"에서 호출되어 0x78543AD9로 호출하고 NULL을 반환합니다. 오류 : 지정된 절차를 찾을 수 없습니다 (127). getProcAddress (0x7c800000 [C : Windows System32 Kernel32.dll], "flssetValue") "C : Program Files App App MSVCR90.dll"에서 호출되어 0x78543AE6을 반환했습니다. 오류 : 지정된 절차를 찾을 수 없습니다 (127). getProcAddress (0x7c800000 [C : Windows System32 Kernel32.dll], "flsfree") "C : Program Files App MSVCR90.dll"에서 호출 된 0x78543AF3 및 리턴 NULL. 오류 : 지정된 절차를 찾을 수 없습니다 (127).

Windows SDK 7이 기본 SDK로 설치되고 구성되어 있다고 언급해야합니다.

도움이 되었습니까?

해결책 2

매니페스트 도구는 실제로 버그가 많고 유일한 신뢰할 수있는 솔루션은 임베딩이 거의 무작위로 실패하기 때문에 바이너리에 매니페스트를 포함시키지 않는 것이 었습니다. 표현을 외부로 유지하는 것은 못 생겼지 만 적어도 항상 작동합니다.

다른 팁

나는 항상 내 DLL에 매니페스트를 포함시키고 문제가 없었습니다. 나는 매니페스트를 포함하는 것을 잊었을 때만 문제를 일으켰습니다. 그런 다음 Windows 2008에서 msvcr90.dll을 찾지 못하지만 이전 버전의 Windows에서 작동하여 한동안 혼란 스러웠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top