Ich möchte eine Benachrichtigung, wenn ein bestimmter RegistryKey in HKEY_CURRENT_USER
geändert wird. Bislang habe ich dies versucht über WMI
ohne Erfolg:
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();
(Fehler war "Nicht gefunden")
Mein zweiter Ansatz war die Verwendung der WBEM Scripting COM component
mit der Absicht, das Beispiel von http://msdn.microsoft.com/en-us/library/aa393042(VS.85).aspx zu c#, aber ich habe keine Anwendungsbeispiele für das WBEM COM in c# gefunden
こんなの見つけた http://www.codeproject.com/KB/system/registrymonitor.aspx Klasse, aber sie entsprach nicht meinen Bedürfnissen, da diese Klasse nur den gesamten Schlüssel überwacht und ich nur eine Benachrichtigung möchte, wenn ein bestimmter Wert (angegeben über die ValueName
in den obigen Beispielen) wird geändert.
EDIT: Wenn Sie den Hive ändern in HKEY_CURRENT_USER
in dem msdn vbscript-Beispiel funktioniert es nicht mehr. Ich konnte nichts über dieses Verhalten finden, aber ein Link aus dem Jahr 2003
EDIT2: Änderungen der HKEY_CLASSES_ROOT
y HKEY_CURRENT_USER
Hives werden nicht unterstützt von RegistryEvent
oder von ihr abgeleitete Klassen, wie RegistryValueChangeEvent
. ( MSDN )