Случай:
Программа должна быть перезапущена, чтобы прочитать новое значение.
Я wad googling и глядя на класс CRegKey, но я не вижу ничего, что могло бы ответить на мой вопрос. Я также знаю, что explorer.exe, например, должен быть перезапущен при внесении изменений в реестр для их вступления в силу.
Есть ли способ получить новую "копию" реестра во время выполнения?
EDIT: Оказывается, мой случай выше полностью неверен. Это была ошибка где-то еще, что мешало мне читать новое значение.
Это функция: RegFlushKey()
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724867%28v=vs.85%29.aspx
возможно, это то, что вы ищете, но эту функцию следует вызывать кодом, который изменяет реестр
вот выдержка из замечаний:
Вызов RegFlushKey - это дорогостоящая операция, которая значительно влияет на производительность всей системы, поскольку она потребляет полосу пропускания диска и блокирует изменения всех ключей всеми процессами в кустах реестра, которые размываются до завершения операции флеша. RegFlushKey следует вызывать только явно, когда приложение должно гарантировать, что изменения реестра будут сохраняться на диске сразу после изменения. Все изменения, внесенные в ключи, видны другим процессам без необходимости их сбрасывать на диск.
Если программа только считывает реестр при запуске, то что он делает. Если это ваша программа, вам нужно изменить ее, чтобы перечитывать раздел реестра каждый раз, когда он делает соответствующую вещь, или периодически опросить реестр, чтобы проверить, изменилось ли значение. В противном случае вы собираетесь перезапустить программу.
Или, как это часто бывает, если вы пишете реестр напрямую, а не вызываете правильный API для изменения настройки, не делайте этого!
Изменение: oops, способ неправильно прочитать вопрос, хотя приведенное выше относится к случаям, например Explorer, которые вы упомянули.
Если программа перечитывает открытый HKEY, может возникнуть проблема кэширования, которая не позволяет увидеть изменения в другой программе. Не имеет значения, находится ли "канонический" реестр в ОЗУ или покраснел на диск - это больше проблема устойчивости.
RegFlushKey(reg);
прежде чем я закрою регки, но это не похоже на работу. Это как если бы реестр, представленный каждой программе, представлял собой моментальный снимок во время запуска программы. Я проверю возвращаемое значение на всякий случай ..