mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Added broadcast change to force registry update
This commit is contained in:
parent
7b44c0844d
commit
fe49dcb57c
2 changed files with 18 additions and 0 deletions
|
@ -39,6 +39,8 @@ import logging
|
|||
# Import third party libs
|
||||
try:
|
||||
from salt.ext.six.moves import winreg as _winreg # pylint: disable=import-error,no-name-in-module
|
||||
from win32gui import SendMessageTimeout
|
||||
from win32con import HWND_BROADCAST, WM_SETTINGCHANGE, SMTO_ABORTIFHUNG
|
||||
HAS_WINDOWS_MODULES = True
|
||||
except ImportError:
|
||||
HAS_WINDOWS_MODULES = False
|
||||
|
@ -129,6 +131,16 @@ def _key_exists(hive, key, use_32bit_registry=False):
|
|||
return False
|
||||
|
||||
|
||||
def broadcast_change():
|
||||
'''
|
||||
Refresh the windows environment.
|
||||
:return:
|
||||
'''
|
||||
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms644952(v=vs.85).aspx
|
||||
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0,
|
||||
SMTO_ABORTIFHUNG, 5000)
|
||||
|
||||
|
||||
def read_key(hkey, path, key=None, use_32bit_registry=False):
|
||||
'''
|
||||
.. important::
|
||||
|
@ -363,6 +375,7 @@ def set_value(hive,
|
|||
_winreg.SetValueEx(handle, vname, 0, vtype, vdata)
|
||||
_winreg.FlushKey(handle)
|
||||
_winreg.CloseKey(handle)
|
||||
broadcast_change()
|
||||
return True
|
||||
except (WindowsError, ValueError, TypeError) as exc: # pylint: disable=E0602
|
||||
log.error(exc, exc_info=True)
|
||||
|
@ -496,6 +509,7 @@ def delete_key(hkey,
|
|||
key_handle = _winreg.OpenKey(hive, key, 0, access_mask)
|
||||
_winreg.DeleteKey(key_handle, '')
|
||||
_winreg.CloseKey(key_handle)
|
||||
broadcast_change()
|
||||
return True
|
||||
except WindowsError as exc: # pylint: disable=E0602
|
||||
log.error(exc, exc_info=True)
|
||||
|
@ -576,6 +590,8 @@ def delete_key_recursive(hive, key, use_32bit_registry=False):
|
|||
log.error(exc, exc_info=True)
|
||||
ret['Failed'].append(r'{0}\{1} {2}'.format(hive, sub_key_path, exc))
|
||||
|
||||
broadcast_change()
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
|
@ -620,6 +636,7 @@ def delete_value(hive, key, vname=None, reflection=True, use_32bit_registry=Fals
|
|||
handle = _winreg.OpenKey(hive, key, 0, access_mask)
|
||||
_winreg.DeleteValue(handle, vname)
|
||||
_winreg.CloseKey(handle)
|
||||
broadcast_change()
|
||||
return True
|
||||
except WindowsError as exc: # pylint: disable=E0602
|
||||
log.error(exc, exc_info=True)
|
||||
|
|
|
@ -697,6 +697,7 @@ def install(name=None, refresh=False, pkgs=None, saltenv='base', **kwargs):
|
|||
tries = 0
|
||||
difference = salt.utils.compare_dicts(old, new)
|
||||
while not all(name in difference for name in changed) and tries < 10:
|
||||
__salt__['reg.broadcast_change']()
|
||||
time.sleep(3)
|
||||
new = list_pkgs()
|
||||
difference = salt.utils.compare_dicts(old, new)
|
||||
|
|
Loading…
Add table
Reference in a new issue