Windows 系统突然关闭时将旧值恢复到 regedit

Windows restoring old value to regedit when abrupt shutdown of the system

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

假设 正在发生的事情是 Windows 不是 "committing" 永久存储的值,并且当我重新启动。无论如何,有没有办法强制将此值存储到硬盘驱动器?或者,如果不是这种情况,那么为什么将这个旧值恢复回注册表以及如何避免这种情况发生?提前致谢。

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

不必调用 Flush 来写出对键的更改。 当注册表使用其惰性刷新器时,注册表更改会刷新到磁盘。在系统指定的时间间隔后,延迟刷新会自动并定期发生。注册表更改也会在系统关闭时刷新到磁盘。

与Close不同,Flush函数returns只有在所有数据都写入注册表后才可以。

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

只有在必须绝对确定注册表更改已记录到​​磁盘时,应用程序才应调用 Flush。一般来说,很少需要使用 Flush。

问题是我没有给这个 "lazy flusher" 足够的时间来将寄存器存储到磁盘中。我在 SetValue() 之后立即拨打了 flush() 电话,之后我注意到值已正确存储并且错误已停止。