我发现在一台运行Windows Server 2012 R2 Standard的特定机器上,32位Win32控制台应用程序会加载64位版本的kernel32.dll。使用Dependency Walker和一个简单的HelloWorld应用程序,情况如下:
它可以在其他机器上正确加载32位的kernel32。
根据微软的这个页面,DLL的搜索顺序如下:
你有什么想法是什么导致了这种行为?
PATH
的值似乎在不同的机器上至少包含相同顺序的相关路径,如果不是完全相同的话。根据微软的这个页面,DLL的搜索顺序如下:
- 当前进程可执行模块所在的目录。
- 当前目录。
- Windows系统目录。GetSystemDirectory函数检索此目录的路径。
- Windows目录。GetWindowsDirectory函数检索此目录的路径。
- 列在PATH环境变量中的目录。
GetSystemDirectory
返回的是指向Windows/system32
而不是Windows/SysWOW64
的路径,或者32位进程从system32
到SysWOW64
的映射没有正常工作,但这些只是合格的猜测。你有什么想法是什么导致了这种行为?
\KnownDlls32\kernel32.dll
部分,它将被使用。 - RbMm