«Обновление» реестра Windows после изменения ключа

0

Случай:

  1. Ключ реестра имеет значение DWORD 0
  2. Измените значение ключа реестра на 1
  3. Прочтите значение еще раз: все равно 0

Программа должна быть перезапущена, чтобы прочитать новое значение.

Я wad googling и глядя на класс CRegKey, но я не вижу ничего, что могло бы ответить на мой вопрос. Я также знаю, что explorer.exe, например, должен быть перезапущен при внесении изменений в реестр для их вступления в силу.

Есть ли способ получить новую "копию" реестра во время выполнения?

EDIT: Оказывается, мой случай выше полностью неверен. Это была ошибка где-то еще, что мешало мне читать новое значение.

Теги:
winapi
registry

2 ответа

1
Лучший ответ

Это функция: RegFlushKey()

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724867%28v=vs.85%29.aspx

возможно, это то, что вы ищете, но эту функцию следует вызывать кодом, который изменяет реестр

вот выдержка из замечаний:

Вызов RegFlushKey - это дорогостоящая операция, которая значительно влияет на производительность всей системы, поскольку она потребляет полосу пропускания диска и блокирует изменения всех ключей всеми процессами в кустах реестра, которые размываются до завершения операции флеша. RegFlushKey следует вызывать только явно, когда приложение должно гарантировать, что изменения реестра будут сохраняться на диске сразу после изменения. Все изменения, внесенные в ключи, видны другим процессам без необходимости их сбрасывать на диск.

  • 0
    Я действительно попробовал это. RegFlushKey(reg); прежде чем я закрою регки, но это не похоже на работу. Это как если бы реестр, представленный каждой программе, представлял собой моментальный снимок во время запуска программы. Я проверю возвращаемое значение на всякий случай ..
  • 0
    Я рекомендую вам использовать procmon от sysinternals для проверки изменений, которые ваша программа вносит в реестр, это может показать, что не так.
Показать ещё 1 комментарий
0

Если программа только считывает реестр при запуске, то что он делает. Если это ваша программа, вам нужно изменить ее, чтобы перечитывать раздел реестра каждый раз, когда он делает соответствующую вещь, или периодически опросить реестр, чтобы проверить, изменилось ли значение. В противном случае вы собираетесь перезапустить программу.

Или, как это часто бывает, если вы пишете реестр напрямую, а не вызываете правильный API для изменения настройки, не делайте этого!

Изменение: oops, способ неправильно прочитать вопрос, хотя приведенное выше относится к случаям, например Explorer, которые вы упомянули.

Если программа перечитывает открытый HKEY, может возникнуть проблема кэширования, которая не позволяет увидеть изменения в другой программе. Не имеет значения, находится ли "канонический" реестр в ОЗУ или покраснел на диск - это больше проблема устойчивости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню