使用 Dev-C++所編譯出來的程式,都是32位元的
在x64的系統中,有時候會導致讀取不到想要讀取的資料
舉例:
若安裝 64 位元的 JDK,則在 Dev-C++ 讀取不到 Java 的安裝路徑
REG QUERY "hklm\SOFTWARE\JavaSoft\Java Development Kit" /v CurrentVersion (找不到)
這時,請改用以下敘述
%windir%\Sysnative\REG QUERY "hklm\SOFTWARE\JavaSoft\Java Development Kit" /v CurrentVersion
因為在x64系統中執行32位元的程式,會自動進入 WOW64 的模式,位於 %windir%\System32 的 reg.exe (64bit) 會被重定向到 %windir%\SysWOW64 的 reg.exe (32bit)
若要在32位元的程式中強制讀取位於 %windir%\System32 的 reg.exe (64bit),則須改用 %windir%\Sysnative\
參考資料:
http://blog.csdn.net/andylin02/article/details/2679792 - 重定向
http://blog.xuite.net/y0933717246/IT/39759341 - 補充說明 SysWoW64 目錄
http://www.cnblogs.com/hsapphire/archive/2011/03/09/1978519.html - 如何通过使用 64 位版本 Windows 查看系统注册表 WOW6432Node
http://www.tipandtrick.net/2008/how-to-suppress-and-bypass-system32-file-system-redirect-to-syswow64-folder-with-sysnative/zh_TW/ - 如何制止和繞道system32文件系統重定向到SysWow64文件夾與sysnative
http://www.tipandtrick.net/2008/how-to-suppress-and-bypass-system32-file-system-redirect-to-syswow64-folder-with-sysnative/ - How to Suppress and Bypass System32 File System Redirect to SysWOW64 Folder with Sysnative
- 什么是重定向
无论是Windows XP Professional X64 Edition、Windows Server 2003 X64 Edition还是Windows Vista X64 Edition(以下把均统称为X64系统),都引入了一项技术:文件和注册表的重定向。
之所以有这个技术,是为了将32位程序和64位程序分离开。这种在64位平台上运行32位程序的模拟器被称为WOW64。WOW64是"Windows 32 on Windows 64"的简称,它在系统层中另提供了一层,以支持老式的32位程序。
在X64系统里面,一些特殊的目录和特殊的注册表键被分为2个独立的部分。对于文件系统来说,%systemroot%/system32 目录被保留给64位文件使用,而32位文件会被重定向到%systemroot%/SysWOW64目录。换句话说,所有的32位程序一般情况下只会出现在%systemroot%/SysWOW64目录里面。任何32位程序试图访问%systemroot%/system32 目录的企图都会被重定向到%systemroot%/SysWOW64目录。这个是一个默认的行为,除非程序的线程明确的指名需要关闭这种重定向机制。
对于注册表来说,也有类似的内容。WOW64子系统也提供了对注册表访问的重定向。如果是32位程序,对注册表的操作不论是读还是写, WOW64都将会截取对HKLM/Software访问,并重定向到HKLM/Software/Wow6432Node(即32位应用程序的注册信息被写在HKLM/Software/Wow6432Node中,而不是预期的HKLM/Software中);如果是64位程序,就直接到 HKLM/Software。
- 需要重定向的注册表项
注册表重定向,其实质就是维护两套不同的注册表键,一套用于64位,一套用于32位。受影响的键不只是上面提及的HKLM/Software,还包括: