我有一个在Windows CE 6(手持设备)上运行的程序,我经常注意到这种情况。我在HKEY_CURRENT_USER\SOFTWARE\my-app
上存储了一个值,用于控制用户使用该应用的最后日期。该值在我的程序中多次更新。在一个受控测试中,我在移除电池之前检查了值以强制重启,我在那里看到一个值,为简单起见说“A”。但是这次测试失败了,我不得不重新开始。然后,我检查了注册表值,现在它是值“B”。然后,我再次移除电池进行测试,重启后我注意到值“A”再次存回注册表。
我假设发生的事情是Windows没有将值“提交”到永久存储器,并且在重新启动时它被缓存在内存中。无论如何,有没有办法强制将这个值存储到硬盘?或者,如果不是这样,那么为什么这个旧值会恢复到注册表以及如何避免这种情况发生呢?提前谢谢。
答案 0 :(得分:0)
问题解决了。根据{{3}},flush()方法解决了它:
没有必要调用Flush来写出对密钥的更改。 注册表使用其延迟刷新程序时,注册表更改将刷新到磁盘。在系统指定的时间间隔后,将自动且定期地进行延迟刷新。系统关闭时,注册表更改也会刷新到磁盘。
与Close不同,Flush函数仅在所有数据都已写入注册表时返回。
Flush功能也可能会写出部分或全部其他键。过度调用此函数会对应用程序的性能产生负面影响。
如果必须绝对确定注册表更改是否记录到磁盘,则应用程序应仅调用Flush。一般来说,Flush很少(如果有的话)需要使用。
问题是我没有足够的时间给这个"懒惰的冲洗器"将寄存器存储到磁盘中。我在flush()
之后立即拨打SetValue()
,之后我注意到这些值已正确存储,错误我已停止。