Как обновить значение реестра - PullRequest
1 голос
/ 30 ноября 2010

Я удаляю какое-то приложение и считываю значение перечисления установки программного обеспечения из реестра.

Проблема заключается в том, что после удаления не изменяется значение реестра до тех пор, пока экран или regedit не обновятся. только после обновления я получаю правильное значение.

Может ли кто-нибудь помочь мне обновить regedit в кодах Python.

С уважением, Упендра

Ответы [ 4 ]

1 голос
/ 29 июня 2015

У меня такая же проблема. Я "устанавливаю" инструмент и среду 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 (думаю, нет), но, по крайней мере, это попытка.

1 голос
/ 30 ноября 2010

Я предполагаю, что под "обновлением" "экрана" вы подразумеваете перезагрузку компьютера? В любом случае, вы можете быть уверены, что любые измененные ключи реестра будут корректно обновлены после перезапуска системы. Реестр обновляется ленивыми потоками сброса и записи, поэтому я предполагаю, что внесенные вами изменения не сразу возвращаются в реестр, но ваш вопрос не дает достаточно информации о том, как вы изменяете эти значения реестра. чтобы я мог предложить альтернативное решение.

Возможно, еще важнее, что вы пытаетесь сделать здесь? Вы пытаетесь заставить программу удаления проверить, что ваше приложение было удалено? Почему это необходимо? Я чувствую, что должен быть лучший способ, чем ожидать, что изменения в реестре будут зафиксированы, а затем немедленно зачитаны.

0 голосов
/ 07 декабря 2018

Просто перезапустите проводник Windows с SysInternal's Process Explorer.

0 голосов
/ 30 ноября 2010

Я изменяю раздел реестра и хочу прочитать эти значения без перезапуска системы.

Я могу читать вручную, если обновляю экран (кнопка F5), но не могли бы вы дать мне знать, как захватить это через python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...