关于操作注册表的高难 度问题

时间:2022-06-01 21:18:28
程序有使用注册表的功能,主要记录一些用户设置的数据,它存放在HKEY_CURRENT_USER\Software下面的一个自定义的子键下面(HKEY_CURRENT_USER\Software\aa),现在的问题是aa下面的数据经常莫明奇妙地丢失了,有时甚至整个aa都没有了,这是咋回事啊!

我的设计思路是:程序启动的时候先从注册表读取数据,然后依据这些数据初使化程序的各类设置,在程序退出的时候再将用户的一些数据保存在注册表。

类的实现:CSystemOption类,此类中的一些私有成员变量与注册表中的内容一一对应,它采用一个单件模式,GetInstance函数得到此类的唯一对象(如果不存在则新建一个这样的对象,Load函数从注册表中得到所需要的数据,如果没有则设置一个默认值)。在用户操作的时候不直接对注册表进行操作,而是把数据存放在这个类的唯一对象的成员变量中,等整个程序退出的时候再调用此类的Save函数,将所有数据保存在注册表中。最后调用成员函数我觉得这样没什么问题呀,为什么老是要丢数据呢。

9 个解决方案

#1


不要放在HKEY_CURRENT_USER里面,放在HKEY_LOCAL_MACHINE里面

#2


应该是你在代码中不经意做了删除操作了吧,或者你在HKEY_LOCAL_MACHINE\SOFTWARE键下操作试试

#3


但是如果放在HKEY_LOCAL_MACHINE里面每个不同权限的用户都可以使用吗?
我没有任何删除的指令,只是用到了一些RegCreateKeyEx, RegSetValueEx函数

#4


保存设置信息一般多采用读写文件的方式,简单易行
没有必要对注册表进行操作吧?

#5


打开注册表忘了关闭?还是RegCreateKeyEx得参数不对将原来的删除了

#6


记录下你写注册表得地方,可能是你写多次以后将之前得覆盖了

#7


HKEY_CURRENT_USER是存放当前用户信息的
如果你换个用户,那当然就找不到你放的数据了
所以要放在HKEY_LOCAL_MACHINE下
不过不知道你的毛病是不是这样

#8


我正是为了实现多用户不同配置的功能才把它放在HKEY_CURRENT_USER下面的。

谢谢大家的热情。

#9


是我自己弄错了,在调用RegCreateKeyEx时用了REG_OPTION_VOLATILE参数

#1


不要放在HKEY_CURRENT_USER里面,放在HKEY_LOCAL_MACHINE里面

#2


应该是你在代码中不经意做了删除操作了吧,或者你在HKEY_LOCAL_MACHINE\SOFTWARE键下操作试试

#3


但是如果放在HKEY_LOCAL_MACHINE里面每个不同权限的用户都可以使用吗?
我没有任何删除的指令,只是用到了一些RegCreateKeyEx, RegSetValueEx函数

#4


保存设置信息一般多采用读写文件的方式,简单易行
没有必要对注册表进行操作吧?

#5


打开注册表忘了关闭?还是RegCreateKeyEx得参数不对将原来的删除了

#6


记录下你写注册表得地方,可能是你写多次以后将之前得覆盖了

#7


HKEY_CURRENT_USER是存放当前用户信息的
如果你换个用户,那当然就找不到你放的数据了
所以要放在HKEY_LOCAL_MACHINE下
不过不知道你的毛病是不是这样

#8


我正是为了实现多用户不同配置的功能才把它放在HKEY_CURRENT_USER下面的。

谢谢大家的热情。

#9


是我自己弄错了,在调用RegCreateKeyEx时用了REG_OPTION_VOLATILE参数