首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++读取注册表遇到的奇怪有关问题

2013-08-09 
C++读取注册表遇到的奇怪问题,求助小弟最近在写一个读取注册表的程序,在写如下代码时出现了问题:SetRegedi

C++读取注册表遇到的奇怪问题,求助
小弟最近在写一个读取注册表的程序,在写如下代码时出现了问题:


SetRegeditPath()
{
// Set the key path
char *szSubkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
ReadRegedit(szSubkey);
}
void CSoftwareFinderDlg::ReadRegedit(char* szSubKey)
{
        std::list<SoftwareInfo> nameList;
lRetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szSubKey, 0, KEY_READ, &hKey);
if(ERROR_SUCCESS == lRetVal)
{
lRetVal = RegEnumKeyEx(hKey, nIndex, szName, &nNameLen, 0, NULL, NULL, 0);
while(lRetVal != ERROR_NO_MORE_ITEMS)
{
nIndex++;
if(_tcscmp(szName, _T("")) == 0) continue;
CString strs=szName;
strs=strs.Trim();
SoftwareInfo soft;    //将键名保存到list中
soft.name=strs;
nameList.push_back(soft);
                 }
          }
          FileSave(nameList);    //将信息保存到文件中
}

在读取注册表位置SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall时,发现读出来的内容不符,读取的是Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall下的内容,怎么会出现这种问题?排除读取位置写错的可能,我的系统是Win764位,难道和系统有关?
[解决办法]
while(lRetVal != ERROR_NO_MORE_ITEMS)  
 //不懂Windows注册表,但是这里如果进来了while循环  哪里退出呢?
        {
            nIndex++;
            if(_tcscmp(szName, _T("")) == 0) 
                    continue;
            CString strs=szName;
            strs=strs.Trim();
            SoftwareInfo soft;    //将键名保存到list中


            soft.name=strs;
            nameList.push_back(soft);
                 
         }


[解决办法]
你的程序编译成32位版本,还是64位版本?
[解决办法]
64位系统里 启动32位注册表编译器的命令是 %systemroot%\syswow64\regedit.exe
[解决办法]
http://blog.csdn.net/pbymw8iwm/article/details/6931120
32 位注册表项和 64 位注册表项

你用什么开发环境?VC6? VS2005? VS2008?

http://bbs.csdn.net/topics/300227899
如何用vs2008编译64位程序
[解决办法]
如果在选择平台的下拉列表里找不到x64,可能是没有安装x64编译支持。在VS安装程序里再装上就可以了。

热点排行