zoukankan      html  css  js  c++  java
  • Windows:32位程序运行在64位系统上注册表会重定向

    参考资料

    微软注册表英文文档

    StackOverflow社区回答

    1、注册表位置

           64bit系统(Windows Server 2008 R2只有64bit系统)的注册表分32 位注册表项和64位注册表项两部分。

           在64bit系统下,通过regedit中查看到指定路径下的注册表项均为64位注册表项,而32位注册表项被重定位到:HKEY_LOCAL_MACHINE\Software\WOW6432Node。

           应用程序操作注册表的时候也分32bit方式和64bit方式。运行于64bit系统下的32bit应用程序默认操作32位注册表项(即被重定向到WOW6432Node下的子项);而64bit应用程序才是操作的直观子项。

           比如,同在64bit系统下,使用如下代码访问注册表:

           ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Software\\Sobey\\MPC "), 0,KEY_ALL_ACCESS, &hKey)

           如果应用程序为32bit子系统,那么实际访问的注册表位置为:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Sobey\MPC;

           而如果应用程序为64bit子系统,那么实际访问的注册表位置将会是:HKEY_LOCAL_MACHINE\SOFTWARE\Sobey\MPC。

    2、程序编写

           编程过程中,可以使用KEY_WOW64_64KEY和KEY_WOW64_32KEY明确的指定操作64位注册表项或者32位注册表项。例如,

           32bit应用程序,可以用如下方式明确指定访问64bit注册表项,程序代码:

           ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Software\\Sobey\\MPC "), 0, KEY_ALL_ACCESS| KEY_WOW64_64KEY,&hKey)

           注意关键字KEY_WOW64_64KEY;

           这种方式写入的注册表项将会确切的位于位置:HKEY_LOCAL_MACHINE\SOFTWARE\Sobey\MPC。

            64bit应用程序,可以用如下方式明确指定访问32bit注册表项,程序代码:

            ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Software\\Sobey\\MPC\\Test"), 0, KEY_ALL_ACCESS| KEY_WOW64_32KEY, &hKey)

            注意关键字KEY_WOW64_32KEY

            这种方式写入的注册表项将会确切的位于位置:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Sobey\MPC。

    3、特别提醒

           上述说明只针对HKEY_LOCAL_MACHINE主键而言,HKEY_CURRENT_USER主键下没有类似情况;当访问HKEY_CURRENT_USER主键时,明确指定KEY_WOW64_64KEY和KEY_WOW64_32KEY标志也没有意义。

             总之,尽可能使用HKEY_CURRENT_USER主键来保存用户配置吧。

    4、参考文档

             如何通过使用 64 位版本 Windows 查看系统注册表

             Accessing anAlternate Registry View

             Registry Redirector in x64 / IA64

  • 相关阅读:
    关于 HSSF 和 XSSF 功能的开发者入门指南 (Apache POI 操作 Excel)
    在Windows上安装MySQL(免安装ZIP版)
    Linux下解决中文乱码问题
    VMware安装VMware Tools
    (RHEL)Linux下的oracle(11g R2)安装过程
    每天学一点Python
    简单的Datatable转List,Json
    C# 刷票程序
    一些顿悟,和新的开始!
    每天学一点Python(2)
  • 原文地址:https://www.cnblogs.com/2018shawn/p/9025992.html
Copyright © 2011-2022 走看看