>Case:
- 注册表项的 DWORD 值为 0
- 将注册表项值更改为 1
- 再次读取该值:它仍然是 0
必须重新启动程序才能读取新值。
我在谷歌上搜索并查看CRegKey类,但我没有看到任何可以回答我的问题。我还知道资源管理器.exe例如,在进行注册表更改时必须重新启动才能生效。
有没有办法在运行时获取注册表的新"副本"?
编辑:事实证明我上面的情况是完全不正确的。这是其他地方的一个错误,阻止我读取新值。
> 这是一个函数:RegFlushKey()
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724867%28v=vs.85%29.aspx
也许这就是您要找的,但是此函数应由修改注册表的代码调用
以下为备注摘录:
调用RegFlushKey是一项昂贵的操作,它显着 影响系统范围的性能,因为它会消耗磁盘带宽和 阻止注册表配置单元中所有进程对所有键的修改 在刷新操作完成之前,正在刷新。RegFlushKey 应仅在应用程序必须保证时显式调用 注册表更改在之后立即保存到磁盘 修改。对密钥所做的所有修改对其他人可见 进程,无需将它们刷新到磁盘。
编辑:哎呀,误读那里的问题的方式,尽管上述内容与您提到的资源管理器等情况有关。
如果程序正在重新读取打开的 HKEY ,则可能存在缓存问题,阻止它看到其他程序的更改。"规范"注册表是否在 RAM 中或刷新到磁盘应该无关紧要 - 这更像是一个持久性问题。