Windows Server 2012 R2 Standard를 실행하는 특정 컴퓨터에서 32 비트 Win32 콘솔 응용 프로그램이 64 비트 버전의 kernel32.dll을로드하는 중입니다. 그것은 다음과 같습니다 간단한 하여 HelloWorld 응용 프로그램과 함께 Dependency Walker를 사용Win32 32 비트 프로세스가 64 비트 kernel32.dll을로드합니다.
:
는이 제대로 다른 컴퓨터에서 32 비트 KERNEL32를로드합니다.
는PATH
의 값은 동일하지 그래서 적어도 다른 컴퓨터에 정확히 동일한 순서로 관련 경로를 포함하는 경우 것 같다.
Microsoft에서 this page에 따르면, DLL에 대한 검색 순서는 다음과 같습니다
- 현재 프로세스의 실행 모듈이있는 디렉토리.
- 현재 디렉토리.
- Windows 시스템 디렉토리.
GetSystemDirectory
함수는이 디렉토리의 경로를 검색합니다. - Windows 디렉터리입니다.
GetWindowsDirectory
함수는이 디렉터리의 경로를 검색합니다. PATH
환경 변수에 나열된 디렉토리.
나는 Windows/system32
대신 Windows/SysWOW64
또는 32 비트 프로세스에 대한 SysWOW64
에 system32
에서 매핑이 제대로 작동하지 않지만 이러한 자격을 갖춘 추측이라는 경로를 반환 GetSystemDirectory
이 특정 컴퓨터에 그 추측하고있다.
이 문제의 원인은 무엇입니까?
이것은 종속성 워커의 실수 일뿐입니다. 32 비트 앱은 정적 가져 오기로 kernel32.dll의 64 비트 버전을로드하지 않습니다. 및 경로/GetSystemDirectory - 항상 여기에 관련이 없으므로 항상 \ KnownDlls32 \ kernel32.dll 섹션에 있습니다. 그것은 사용될 것입니다 – RbMm
Dependency Walker가 다소 안정적으로 작업 한 마지막 시간은 Windows Vista에있었습니다. Dependency Walker에서 Windows 7을 시작하는 모든 OS에서 혼란 스럽거나 오도 된 정보를 볼 수 있도록 준비하십시오. DLL 문제를 진단하는 더 좋은 방법은 [loader snaps 사용] (https://docs.microsoft.com/en-us/windows)입니다. -hardware/drivers/debugger/show-loader-snaps)를 사용합니다. – IInspectable