windows 7 下 TRegistry 类有点怪异
本来想用以上代码改变注册表的一些东西。
代码如下:
//m_Reg 为 TRegistry 实例指针
m_Reg->RootKey = HKEY_LOCAL_MACHINE;
bool ret = m_Reg->OpenKey("SOFTWARE\\XXX01\\XXX02\\6.0",true);
m_Reg->WriteString("ApplicationPath",GetCurrentDir());
以上代码在XP下运行没什么问题,在Windows 7 下用了管理员身份运行, m_Reg->OpenKey 函数
返回true了,但看注册表中 "SOFTWARE\\XXX01\\XXX02\\6.0"并没有建立,m_Reg->WriteString 函数也
没有起作用。
然后我手动导入注册表"SOFTWARE\\XXX01\\XXX02\\6.0"字串和 "ApplicationPath"="C:\\Program Files\\XXX01"
字串,然后想用刚才的代码改变"ApplicationPath"的值,但也改不了。
没办法,我就安装了XXX01.exe程序,它安装的后会在注册表中"SOFTWARE\\XXX01\\XXX02\\6.0"建立
"ApplicationPath"="C:\\Program Files\\XXX01"; 然后我再用运行上面代码改变"ApplicationPath"的值,
这样就可以了。
做了很多次实验了,试了创建改变其它键也没成功,什么会这样?真想不明白,我是windows 7 64位系统。
大家有没有遇到这种情况。
[解决办法]
在windows7中,它在Wow6432Node下,和原先XP放的路径不一样。
[解决办法]
不过读取是和原来XP是一样,如创建:
TRegistry *reg=new TRegistry(); reg->RootKey=HKEY_LOCAL_MACHINE;reg->OpenKey("\\SOFTWARE\\blh\\SkinSharp\\setup",true); reg->WriteString("Name",OpenDialog1->FileName.t_str()); reg->CloseKey(); delete reg;
[解决办法]
mmfeng说的对,这不是Windows7的问题,而是64位操作系统的原因。32位的程序读写的注册表键是在Wow6432Node节点下。