"Refreshing" 注册表项更改后的窗口注册表



>Case:

  1. 注册表项的 DWORD 值为 0
  2. 将注册表项值更改为 1
  3. 再次读取该值:它仍然是 0

必须重新启动程序才能读取新值。

我在谷歌上搜索并查看CRegKey类,但我没有看到任何可以回答我的问题。我还知道资源管理器.exe例如,在进行注册表更改时必须重新启动才能生效。

有没有办法在运行时获取注册表的新"副本"?

编辑:事实证明我上面的情况是完全不正确的。这是其他地方的一个错误,阻止我读取新值。

> 这是一个函数:RegFlushKey()

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

也许这就是您要找的,但是此函数应由修改注册表的代码调用

以下为备注摘录:

调用RegFlushKey是一项昂贵的操作,它显着 影响系统范围的性能,因为它会消耗磁盘带宽和 阻止注册表配置单元中所有进程对所有键的修改 在刷新操作完成之前,正在刷新。RegFlushKey 应仅在应用程序必须保证时显式调用 注册表更改在之后立即保存到磁盘 修改。对密钥所做的所有修改对其他人可见 进程,无需将它们刷新到磁盘。

如果程序只在启动时读取注册表,那么这就是它的作用。如果它是您的程序,则需要更改它以在每次执行相关操作时重新读取注册表项,或者每隔一段时间轮询注册表以检查值是否已更改。否则,您将重新启动程序。

或者,通常情况下,如果您直接编写注册表而不是调用正确的 API 来更改设置,请不要这样做!

编辑:哎呀,误读那里的问题的方式,尽管上述内容与您提到的资源管理器等情况有关。

如果程序正在重新读取打开的 HKEY ,则可能存在缓存问题,阻止它看到其他程序的更改。"规范"注册表是否在 RAM 中或刷新到磁盘应该无关紧要 - 这更像是一个持久性问题。

最新更新