RegSetValueEx 在win7 64下返回的值不正确,第四个参数加上KEY_WOW64_64KEY也不行。

解决方案 »

  1.   

    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(使用regedit工具软件对应的位置)。
    在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(使用regedit工具软件对应的位置)。
     
    3、特别提醒
    上述说明只针对HKEY_LOCAL_MACHINE主键而言,HKEY_CURRENT_USER主键下没有类似情况;当访问HKEY_CURRENT_USER主键时,明确指定KEY_WOW64_64KEY和KEY_WOW64_32KEY标志也没有意义。
    总之,尽可能使用HKEY_CURRENT_USER主键来保存用户配置吧。
    ----------------------------------------------------
    网上找的,我没有安装64系统,不知道有没有用
      

  2.   

    win7 64下默认权限是不对普通进程公开的,如果不是以管理员方式运行的进程,则只能读取 local_machine 而不能写入,你可以先设置下你要写入的位置的安全属性试试。
    在子键上右击->权限 
      

  3.   

    没玩过64位的系统,32位下RegSetValuseEx的写法:
    DWORD value =1;
    RegSetValueEx(key,"valueName",0,REG_DWORD,(BYTE*)&value,sizeof(DWORD));
    64位下第4个参数加上KEY_WOW64_64KEY应该没错,LZ字段长度是否书写正确?
      

  4.   

    win7 的问题不一般?!
      

  5.   

    写个manifest提升管理员权限应该就OK了
      

  6.   

    在win7 下操作注册表确实不像xp下简单,我在xp 下编的, 在win7下根本没反应