Quiero una notificación cuando se cambia una clave de registro específica en HKEY_CURRENT_USER
. Hasta ahora he intentado esto a través de WMI
sin éxito:Recibir notificación cuando se cambió el valor de RegistryKey
var query = new WqlEventQuery(string.Format(
"SELECT * FROM RegistryKeyChangeEvent WHERE Hive='{0}' AND KeyPath='{1}' AND ValueName='{2}'",
hive, keyPath.Replace("\\","\\\\"), valueName));
_watcher = new ManagementEventWatcher(query);
_watcher.Scope.Path.NamespacePath = @"root\default";
_watcher.EventArrived += (sender, args) => KeyValueChanged();
_watcher.Start();
(error fue "no encontrado")
Mi segundo enfoque era utilizar el WBEM Scripting COM component
con la intención de puerto el ejemplo de http://msdn.microsoft.com/en-us/library/aa393042(VS.85).aspx a C#, pero No encontré ninguna muestra de uso para WBEM COM en C#
Encontré esta clase http://www.codeproject.com/KB/system/registrymonitor.aspx, pero no se ajustaba a mis necesidades ya que esta clase solo monitorea la clave completa y solo quiero una notificación cuando un valor específico (especificado a través del ValueName
en t las muestras anteriores) se cambian.
EDITAR: Si cambia el Hive a HKEY_CURRENT_USER
en el ejemplo msnn vbscript, deja de funcionar. No pude encontrar nada acerca de este comportamiento, pero a link from 2003
Edit2: Los cambios en los HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
y colmenas no son compatibles con RegistryEvent
o clases derivadas de ella, como RegistryValueChangeEvent
. (MSDN)
Creo que se puede modificar el código del proyecto código para usar múltiples controladores/monitores de espera para que todos digan qué tecla ha sido cambiada. No estoy seguro de cuáles son las implicaciones de n monitores, no parece tan malo: http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx :-) –