2

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

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

有人可以帮我刷新python代码中的regedit吗?

问候, 颠倒

4

4 回答 4

1

我假设“刷新”“屏幕”是指重新启动计算机?无论如何,您可以确保您修改的任何注册表项都将在系统重新启动后正确更新。注册表使用延迟刷新和写入线程进行更新,所以我的猜测是您所做的更改不会立即刷新回注册表,但是您的问题没有提供有关如何修改这些注册表值的足够信息让我能够提出替代解决方案。

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

于 2010-11-30T15:27:48.217 回答
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功能是否会帮助你(我想不会),但至少这是一个尝试。

于 2015-06-29T09:00:19.277 回答
1

您可以使用以下任何一种:

  1. 只需使用SysInternal Process Explorer重新启动 Windows 资源管理器,或
  2. 如果你安装了巧克力,你可以输入refreshenv一个 PowerShell。
于 2018-12-06T21:49:57.587 回答
0

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

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

于 2010-11-30T18:11:41.153 回答