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();
(错误是“未找到”)
我的第二种方法是使用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
上面示例中的)被更改。
编辑:如果您在 msdn vbscript 示例中将 Hive 更改为HKEY_CURRENT_USER
,它将停止工作。除了2003 年的链接,我找不到任何关于这种行为的信息
EDIT2:不支持对HKEY_CLASSES_ROOT
和hives 的更改或从它派生的类,例如. ( MSDN )HKEY_CURRENT_USER
RegistryEvent
RegistryValueChangeEvent