如何刷新注册表值

时间:2010-11-30 15:17:18

标签: windows registry registrykey

我正在卸载某些应用程序并从注册表中读取软件安装枚举值。

问题是在卸载之后它不会更改注册表值,除非屏幕或regedit没有刷新。刷新后我才能得到正确的值。

有人可以帮我刷新python代码中的注册表。

此致 众议员

4 个答案:

答案 0 :(得分:1)

我认为通过“刷新”“屏幕”,你的意思是重新启动计算机?无论如何,您可以确保在重新启动系统后,您修改的任何注册表项都将正确更新。使用延迟刷新和编写器线程更新注册表,因此我猜测您所做的更改不会立即刷回注册表,但您的问题并未提供有关如何修改这些注册表值的足够信息让我能够提出另一种解决方案。

也许更重要的是,你想在这做什么?您是否试图让卸载程序验证您的应用程序是否已卸载?为什么这有必要?我觉得必须有一种比预期提交注册表编辑更好的方法,然后立即回读。

答案 1 :(得分:1)

我有同样的问题。我“安装”一个python工具和环境,并在注册表中创建一些系统变量。要刷新注册表,请执行以下操作:

def RefreshEnv():
    HWND_BROADCAST = 0xFFFF
    WM_SETTINGCHANGE = 0x1A

    SMTO_ABORTIFHUNG = 0x0002

    result = ctypes.c_long()
    SendMessageTimeoutW = ctypes.windll.user32.SendMessageTimeoutW
    SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE, 0, u'Environment',
                        SMTO_ABORTIFHUNG, 5000, ctypes.byref(result))

此方法不像我预期的那样刷新注册表。我仍然需要打开窗口来编辑Windows中的系统变量,只需单击OK即可刷新它们。否则,在尝试捕获环境变量时,我安装的工具会因KeyError而崩溃。

我不知道上面的Refresh函数是否会对你有帮助(我猜不是),但至少这是一次尝试。

答案 2 :(得分:0)

我正在修改注册表项,并希望在不重新启动系统的情况下读取该值。

如果我刷新屏幕(F5按钮),我可以手动阅读,但是你可以告诉我如何通过python捕获它。

答案 3 :(得分:0)

只需使用 SysInternal的 Process Explorer重新启动Windows资源管理器。