我希望在HKEY_CURRENT_USER
更改特定RegistryKey输入时发出通知.到目前为止,我试过这个WMI
没有成功:
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();
Run Code Online (Sandbox Code Playgroud)
(错误是"未找到")
我的第二种方法是使用WBEM Scripting COM component
意图将示例从http://msdn.microsoft.com/en-us/library/aa393042(VS.85).aspx移植到c#,但我没有找到任何用法示例c#中的WBEM COM
我发现这个http://www.codeproject.com/KB/system/registrymonitor.aspx类,但它不符合我的需要,因为这个类只监视整个键,我只想要一个特定值的通知(指定通过ValueName
上面的示例)得到改变.
编辑:如果您HKEY_CURRENT_USER
在msdn vbscript示例中更改Hive ,它将停止工作.我找不到任何关于这种行为的信息,而是2003年的一个链接
EDIT2:不支持对其进行更改HKEY_CLASSES_ROOT
和从中派生的类,例如.(MSDN)HKEY_CURRENT_USER
RegistryEvent
RegistryValueChangeEvent