当系统突然关机时,Windows将旧值恢复为注册表

问题描述:

我有一个运行在Windows CE 6(手持设备)上的程序,我注意到这种情况经常发生。我在HKEY_CURRENT_USER\SOFTWARE\my-app上存储了一个值,用于控制用户使用该应用的最后日期。该值在我的程序中更新多次。在受控测试中,我在检查电池的电量后强制重新启动,我在那里看到了一个值,为简单起见说“A”。但是这个测试失败了,我不得不重新启动。然后,我检查了注册表值,现在它的值是“B”。然后,我再次取出电池进行测试,重新启动后,我注意到“A”值又被存回注册表中。当系统突然关机时,Windows将旧值恢复为注册表

假设所发生的事情是Windows不是“提交”永久存储的值,并且它在我重新启动时被缓冲在内存中。无论如何,有没有办法强制这个值存储到硬盘?或者,如果情况并非如此,那么为什么这个旧值恢复到注册表以及如何避免这种情况发生?提前致谢。

问题已解决。根据msdn,flush()方法解决了这个问题:

没有必要调用Flush来写出对密钥的更改。 当注册表使用其懒惰冲洗器时,注册表更改将刷新到磁盘。在系统指定的时间间隔之后,懒惰冲洗会自动并定期发生。在系统关闭时,注册表更改也会刷新到磁盘。

与Close不同,Flush函数仅在所有数据都已写入注册表时才会返回。

刷新功能也可能写出部分或全部其他键。过度调用此函数会对应用程序的性能产生负面影响。

如果应用程序必须绝对确定将注册表更改记录到磁盘,则应该只调用Flush。一般而言,冲洗很少,如果有的话,需要使用。

问题是我没有给这个“懒惰冲洗器”足够的时间来将寄存器存储到磁盘中。我在SetValue()之后立即拨打flush(),之后我发现这些值已正确存储并且错误已停止。