原先一个win32程序好好地,由于组里不少人用了win 7 64位操作系统,指出原程序有bug,程序不能在64位的操作系统上跑。搞了很久,后来网上搜到一些资料说:64位的操作系统:

xp下具体的程序在电脑中的位置位于:
HKEY_LOCAL_MACHINE\SOFTWARE
vista中是位于
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
如果你在vista64下面依然访问如下位置,
HKEY_LOCAL_MACHINE\SOFTWARE
你得到的其实就是vista下
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
的列表。
这其中其实是WOW进行了转换。其中并给出了判断64位还是32位平台的函数:
IsWow64返回TRUE则是64位系统,否则为32位系统。
code如下:VC测试通过
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process; 
BOOL IsWow64() 

    BOOL bIsWow64 = FALSE; 
    fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress( 
        GetModuleHandle(TEXT("kernel32")),"IsWow64Process"); 
    if (NULL != fnIsWow64Process) 
    { 
        if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64)) 
        { 
            // handle error 
            AfxMessageBox("IsWow64 error!"); 
        } 
    }
    return bIsWow64; 
}

然而,奇怪的是:当我们判断为: IsWow64()时,我便将注册表的地址必为:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\我要读的程序名

依然读取不成功。后来请教了一位老同事,他说这种问题,应该看微软的最新的msdn。随即搜了搜,发现:

Do not try to open Wow6432Node to view the alternate registry hive in 32-bit code. Instead open the desired branch (e.g., HKLM\Software\Microsoft\xxx) with the KEY_WOW64_64KEY flag as shown above.

意思是说:访问时,不要去打开Wow6432Node ,而应在API里使用 KEY_WOW64_64KEY 。

最后,在64位的机器上跑时,使用KEY_WOW64_64KEY标识:

retCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE,subKeyName.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE,
   KEY_EXECUTE|KEY_WOW64_64KEY, NULL, &hkey, NULL);

问题果然解决了!

加油!征途才刚刚开始!

C++ 操作64位系统,默认读取Wow6432Node子键的解决方法。相关推荐

  1. 64位系统使用Access数据库文件的彻底解决方法

    64位系统使用Access数据库文件的彻底解决方法 最近,有PDF.NET用户问我怎么在64位系统下无法访问Access数据库的问题,我第一反应是我怎么没有遇到呢?今天一看自己的VS和Office都是 ...

  2. 64位系统使用Access 数据库文件的彻底解决方法

    最近,有PDF.NET用户问我怎么在64位系统下无法访问Access数据库的问题,我第一反应是我怎么没有遇到呢?今天一看自己的VS和Office都是32位版本的,所以在VS里面调试访问Access是没 ...

  3. Ubuntu 64位系统下无法开启wineQQ7.8的解决办法

    Ubuntu 64位系统下载安装wineQQ7.8后并不能直接打开,原因是wineQQ是32位的,而64位系统默认没安装32位库. 解决办法: 在终端下执行:sudo apt-get install ...

  4. win7纯净版64位系统把exe文件注册成为系统服务的方法

    现在很多的程序服务都是以客户端的形式存在的,就是这样广大win7系统用户不得不在电脑里面安装这些客户端.每次开机的时候我们都要先启动客户端,接着进入相应的文件夹,很麻烦.那么有没有更方便的办法呢?其实 ...

  5. win7 64位系统安装office2013后图标显示不正常解决方法

    #win7 64位系统安装office2013后图标显示不正常解决方法# 1 下载filetypesman,软件为绿色版,不用安装,可直接打开使用 2 查看Word.Excel.PPT的安装位置,后边 ...

  6. ADOLISP在64位系统上读取数据库的解决办法

    第一步:确认64位系统上安装了64位的access驱动.安装office2010的64位版本或者去微软平台下载Access 2010的64位驱动(AccessDatabaseEngine_X64.ex ...

  7. 关于Windows 7 64位系统 HP M1319f 打印机无法扫描的解决办法

    此办法主要针对Windows7 64位系统的用户,对于Xp系统或者Windows8系统没有验证. 笔者在将电脑重装成win7 64位系统后在安装hp打印机驱动的时候打印机自带的驱动盘提示不支持64位系 ...

  8. win7如何开计算机端口,win7旗舰版64位系统快速开启计算机端口的两种方法

    不知道大家对于 win7系统 计算机端口的了解有多少,PConline的小编先跟大家普及一下,所谓的计算机"端口"是英文port的义译,可以认为是计算机与外界通讯交流的出口.分软件 ...

  9. 64位进程隐藏不蓝屏_浅析Linux 64位系统虚拟地址和物理地址的映射及验证方法...

    前言 有好久没更新了,这段时间发生了挺多大喜事哈.但是也还是有挺久没更新了,不得不意识到自己是个小菜鸡,就算是小菜鸡也要做一只快乐小菜鸡.就算更新慢但是我依然会持续更新,因为更文使我快乐. 虚拟内存 ...

最新文章

  1. Mysql insert语句的优化
  2. PyTorch多卡分布式训练:DistributedDataParallel (DDP) 简要分析
  3. golang程序如何优雅地退出
  4. Echarts API说明文档
  5. SAP收购的coresystem app的使用截图
  6. mysql修改最大文件数_mysql更改最大打開文件數
  7. Spring框架XML配置文件使用外部Bean属性注入
  8. 重读模电教材一_童诗白、华成英
  9. ruby on rails_通过Ruby on Rails中的关系调试Has_Many
  10. 个人计算机中的防病毒软件无法,为什么无法在计算机上安装360防病毒软件?
  11. SAP 采购订单税率计算、单价取值(S4)
  12. 淘宝直通车什么情况能退款?怎么退?
  13. 台式机通过笔记本的WIFI连接上网,并实现笔记本对台式机的远程连接
  14. 上拉电阻、下拉电阻、耦合电容、退耦电容 总结
  15. Android各版本特性
  16. python求斐波那契数列第n项
  17. 网站跨域请求的解决方案
  18. 集训队作业2018: 青春猪头少年不会梦到兔女郎学姐(多限制容斥)(生成函数)(组合数学)
  19. 02 项目立项管理:项目建议书、可行性研究、项目评估与论证、项目招标与投标、立项签订合同
  20. 高通平台Bootloader启动流程【转】

热门文章

  1. MyBatis常用配置解析-mapper标签
  2. SpringMVC的XML配置解析
  3. 企业微服务:实现crud操作之创建实体类
  4. 注解IOC案例-把自己编写的类使用注解配置
  5. 数据库-优化-数据库可以从哪几方面进行优化
  6. 数据库-mysql基础操作之输入查询
  7. Dubbo的Provider配置
  8. PriorityBlockingQueue源码
  9. undertale人物_「undertale」传说之下精美人物图包 (SansGaster篇)
  10. virtualbox+vagrant学习-2(command cli)-27-vagrant connect命令