我知道我在做什么很奇怪,请不要担心。 但是, 发生的事绝对是疯狂的。
如果我尝试使用Windows 7 64位上的copy
从命令行copy
C:\SysWOW32\
的DLL文件,实际上我最终得到的是C:\System32\
。 为什么发生这种情况?
确定 – dumpbin能够区分DLL文件
C:\Users\user\Desktop>dumpbin /headers C:\Windows\System32\opengl32.dll | grep machine 8664 machine (x64) C:\Users\user\Desktop>dumpbin /headers C:\Windows\SysWOW64\opengl32.dll | grep machine 14C machine (x86) 32 bit word machine
不行 – 其他命令,如md5sum(来自GOW )得到错误的字节!
C:\Users\user\Desktop>md5sum C:\Windows\system32\opengl32.dll \d1bbe227367ed791d5fcf08e132d2956 *C:\\Windows\\system32\\opengl32.dll C:\Users\user\Desktop>md5sum C:\Windows\SysWow64\opengl32.dll \d1bbe227367ed791d5fcf08e132d2956 *C:\\Windows\\SysWow64\\opengl32.dll
不正确 – 使用命令行复制64位DLL
C:\Users\user\Desktop>copy C:\Windows\System32\opengl32.dll . 1 file(s) copied. C:\Users\user\Desktop>dir opengl32.dll 07/13/2009 06:16 PM 791,552 opengl32.dll C:\Users\user\Desktop>md5sum opengl32.dll d1bbe227367ed791d5fcf08e132d2956 *opengl32.dll C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine 14C machine (x86) 32 bit word machine
错误! 为什么32位DLL被复制?
OK – 使用命令行复制一个32位的DLL
C:\Users\user\Desktop>copy C:\Windows\SysWOW64\opengl32.dll . Overwrite .\opengl32.dll? (Yes/No/All): yes 1 file(s) copied. C:\Users\user\Desktop>dir opengl32.dll 07/13/2009 06:16 PM 791,552 opengl32.dll C:\Users\user\Desktop>md5sum C:\Windows\System32\opengl32.dll \d1bbe227367ed791d5fcf08e132d2956 *C:\\Windows\\System32\\opengl32.dll C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine 14C machine (x86) 32 bit word machine
确定 – 使用资源pipe理器复制一个64位的DLL
<control-drag System32\opengl32.dll to desktop> C:\Users\user\Desktop>dir opengl32.dll 07/13/2009 06:41 PM 1,039,872 opengl32.dll C:\Users\user\Desktop>md5sum opengl32.dll 585fed4cdb8034b8b58aeb8008255817 *opengl32.dll C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine 8664 machine (x64)
确定 – 使用资源pipe理器复制一个32位的DLL
<control-drag SysWow64\opengl32.dll to desktop> C:\Users\user\Desktop>dir opengl32.dll 07/13/2009 06:16 PM 791,552 opengl32.dll C:\Users\user\Desktop>md5sum opengl32.dll d1bbe227367ed791d5fcf08e132d2956 *opengl32.dll C:\Users\user\Desktop>dumpbin /headers opengl32.dll | grep machine 14C machine (x86) 32 bit word machine
任何人都可以解释这里发生了什么?
您看到的行为是由SysWOW64文件系统重定向引起的
md5sum.exe
是一个32位的二进制文件,所以当它请求C:\Windows\System32\opengl32.dll
,文件系统会返回C:\Windows\SysWOW64\opengl32.dll
。
同样,如果启动32位提示符( C:\Windows\SysWOW64\cmd.exe
),执行copy
操作并输入参数C:\Windows\System32\opengl32.dll
, C:\Windows\SysWOW64\opengl32.dll
被复制