2012-02-16 74 views
8

我正在通过我的软件编辑Windows注册表,例如替换Shell(Kiosk应用程序)。防止在WIN7下删除注册表更改的硬重置?

现在我刚刚注意到,在Win7下如果发生硬重置(重置按钮或4秒电源按钮),所有注册表更改都将丢失。

在WinXP下,它工作正常,即使经过硬重置,我所做的更改仍然存在。

在Win7下编辑注册表之后,我是否必须做任何特殊的事情?或者,这甚至可能是内置的Win7安全功能?

对我来说,它看起来像注册表变化没有最终确定,只是保存在内存中,直到软重置发生,这可能是真的吗?如果是这样,我可以以某种方式强制保存吗?

+1

您是否在64位Windows上运行32位软件?可能涉及注册表虚拟化。你设置的重点在哪里? – ixe013 2012-02-16 20:45:15

+0

除了@ ixe013的问题,您的应用程序是否在注册表更改时以管理员帐户运行? – 2012-02-16 20:49:26

+0

这事实上是真的,我在64位Win7上尝试过,尽管我只是在32位机器上试过它,结果是一样的。另外,是的,我正在使用管理员帐户。 – user990767 2012-02-16 20:54:32

回答

12

听起来像是想要RegFlushKey函数。

RegFlushKey函数仅当包含指定键的配置单元的所有数据已写入磁盘上的注册表存储时才会返回。

RegFlushKey函数写出自上次延迟刷新或系统启动以来已修改的配置单元中其他键的数据。

+0

这看起来确实像我想要的。我试着去google一个关于如何使用它的例子,但没有真正出现,请给我一个关于如何使用它的例子吗? – user990767 2012-02-16 20:56:09

+0

@ user990767:你是如何编辑注册表的?你是否使用WinApi函数(所以你有一个'HKEY')或者Delphi中内置的东西? – 2012-02-16 21:00:11

+8

本:+1。 @user,如果你使用的是Delphi的'TRegistry',那么在写你的密钥之前把'TRegistry.LazyWrite'设置为false。它在关闭密钥之前为您执行'RegFlushKey'。 – 2012-02-16 21:00:59