2017-06-13 76 views
0

我有一個運行在Windows CE 6(手持設備)上的程序,我注意到這種情況經常發生。我在HKEY_CURRENT_USER\SOFTWARE\my-app上存儲了一個值,用於控制用戶使用該應用的最後日期。該值在我的程序中更新多次。在受控測試中,我在檢查電池的電量後強制重新啓動,我在那裏看到了一個值,爲簡單起見說「A」。但是這個測試失敗了,我不得不重新啓動。然後,我檢查了註冊表值,現在它的值是「B」。然後,我再次取出電池進行測試,重新啓動後,我注意到「A」值又被存回註冊表中。當系統突然關機時,Windows將舊值恢復爲註冊表

假設所發生的事情是Windows不是「提交」永久存儲的值,並且它在我重新啓動時被緩衝在內存中。無論如何,有沒有辦法強制這個值存儲到硬盤?或者,如果情況並非如此,那麼爲什麼這個舊值恢復到註冊表以及如何避免這種情況發生?提前致謝。

回答

0

問題已解決。根據msdn,flush()方法解決了這個問題:

沒有必要調用Flush來寫出對密鑰的更改。 當註冊表使用其懶惰沖洗器時,註冊表更改將刷新到磁盤。在系統指定的時間間隔之後,懶惰沖洗會自動並定期發生。在系統關閉時,註冊表更改也會刷新到磁盤。

與Close不同,Flush函數僅在所有數據都已寫入註冊表時纔會返回。

刷新功能也可能寫出部分或全部其他鍵。過度調用此函數會對應用程序的性能產生負面影響。

如果應用程序必須絕對確定將註冊表更改記錄到磁盤,則應該只調用Flush。一般而言,沖洗很少,如果有的話,需要使用。

問題是我沒有給這個「懶惰沖洗器」足夠的時間來將寄存器存儲到磁盤中。我在SetValue()之後立即撥打flush(),之後我發現這些值已正確存儲並且錯誤已停止。