为什么我不能从命令行复制C:\ SysWOW64中的DLL?

我知道我在做什么很奇怪,请不要担心。 但是, 发生的事绝对是疯狂的。

如果我尝试使用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.dllC:\Windows\SysWOW64\opengl32.dll被复制