Added broadcast change to force registry update

This commit is contained in:
twangboy 2016-02-01 14:58:06 -07:00
parent 7b44c0844d
commit fe49dcb57c
2 changed files with 18 additions and 0 deletions

View file

@ -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)

View file

@ -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)