Desidero ricevere una notifica quando viene modificato uno specifico Registro di sistema in HKEY_CURRENT_USER
. Finora ho provato questo via WMI
senza successo:Ricevi notifica quando è stato modificato il valore di Registro di sistema
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();
(errore è stato "Non trovato")
mio secondo approccio è stato utilizzando il WBEM Scripting COM component
con l'intento di porto l'esempio da http://msdn.microsoft.com/en-us/library/aa393042(VS.85).aspx a C#, ma Non ho trovato esempi di utilizzo per WBEM COM in C#
Ho trovato questa classe http://www.codeproject.com/KB/system/registrymonitor.aspx, ma non si adattava alle mie esigenze in quanto questa classe monitora solo l'intera chiave e desidero solo una notifica quando un valore specifico (specificato tramite ValueName
in t lui campioni sopra) viene cambiato.
MODIFICA: Se si modifica l'Hive su HKEY_CURRENT_USER
nell'esempio di vdscript msdn, smette di funzionare. Non ho trovato nulla su questo comportamento, ma a link from 2003
EDIT2: Modifiche ai HKEY_CLASSES_ROOT
e HKEY_CURRENT_USER
alveari non sono supportati da RegistryEvent
o classi derivate da esso, come ad esempio RegistryValueChangeEvent
. (MSDN)
io credo che si possa modificare il codice progetto codice per utilizzare più handle di attesa/monitor per indicare almeno quale chiave è stata cambiata. Non sono sicuro di quali siano le implicazioni di n monitor - non sembra così male: http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx :-) –