【发布时间】:2010-11-20 16:36:11
【问题描述】:
我想要在 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,它将停止工作。我找不到有关此行为的任何信息,但 a link from 2003
编辑2:
RegistryEvent 或从它派生的类(例如 RegistryValueChangeEvent)不支持对 HKEY_CLASSES_ROOT 和 HKEY_CURRENT_USER 配置单元的更改。 (MSDN)
【问题讨论】:
-
我相信您可以修改代码项目代码以使用多个等待句柄/监视器,以至少知道哪个键已更改。我不确定 n 监视器的含义是什么——看起来还不错:blogs.technet.com/b/markrussinovich/archive/2009/09/29/… :-)
标签: c# registry wmi notifications wbem