Windows восстанавливает старое значение в regedit при внезапном завершении работы системы

У меня есть программа, работающая на Windows CE 6 (портативное устройство), и я заметил, что это происходит часто. Я храню на HKEY_CURRENT_USER\SOFTWARE\my-app значение, которое используется для контроля последней даты, когда пользователь использовал приложение. Это значение обновляется много раз внутри моей программы. В контролируемом тесте я проверил значение, прежде чем извлекать аккумулятор, чтобы принудительно запустить его, и увидел значение там, скажем "А", для простоты. Но этот тест не прошел, и мне пришлось перезапустить снова. Затем я проверил значение реестра, и теперь это было значение "B". Затем я снова удалил батарею, чтобы выполнить мой тест, и после перезапуска я заметил, что значение "A" снова было сохранено в реестре.

Я полагаю, что происходит то, что Windows не "фиксирует" значение в постоянном хранилище и что оно было помещено в буфер при перезапуске. В любом случае, есть ли способ принудительно сохранить это значение на жестком диске? Или, если это не так, то почему это старое значение возвращается в реестр и как этого избежать? Заранее спасибо.

1 ответ

Решение

Задача решена. Согласно msdn, метод flush() решает это:

Не нужно вызывать Flush для записи изменений в ключ. Изменения в реестре записываются на диск, когда в реестре используется его ленивый сброс. Ленивая промывка происходит автоматически и регулярно по истечении заданного системой интервала времени. Изменения реестра также записываются на диск при выключении системы.

В отличие от Close, функция Flush возвращает только тогда, когда все данные были записаны в реестр.

Функция Flush также может записывать части или все другие клавиши. Чрезмерный вызов этой функции может отрицательно повлиять на производительность приложения.

Приложение должно вызывать Flush только в том случае, если оно должно быть абсолютно уверенным в том, что изменения реестра записаны на диск. В общем, Flush редко, если вообще требуется, нужно использовать.

Дело в том, что я не давал достаточно времени этому "ленивому очистителю", чтобы сохранить регистры на диске. Я позвонил flush() сразу после SetValue() и после этого я заметил, что значения были правильно сохранены и ошибка, которую я остановил.

Другие вопросы по тегам