我想要在HKEY_CURRENT_USER
中的特定RegistryKey發生更改時發出通知。 到目前爲止,我通過WMI
沒有成功嘗試這樣做:當RegistryKey值發生變化時收到通知
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#,但我沒有找到任何使用示例的WBEM COM在c#
我發現這個http://www.codeproject.com/KB/system/registrymonitor.aspx類,但它不符合我的需要,因爲這個類只監視整個鍵,我只想要一個通知,當一個特定的值(通過t中的ValueName
指定)他上面的樣品)得到改變。
編輯: 如果您在msdn vbscript示例中將Hive更改爲HKEY_CURRENT_USER
,它將停止工作。我無法找到有關此問題的任何東西,但a link from 2003
EDIT2: 更改到HKEY_CLASSES_ROOT
和HKEY_CURRENT_USER
蕁麻疹不被從它衍生RegistryEvent
或類,如RegistryValueChangeEvent
支持。 (MSDN)
我相信你可以修改代碼項目代碼使用多個等待句柄/監視器來至少告訴哪個鍵已被改變。我不確定n顯示器的含義是什麼 - 看起來並不那麼糟糕:http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx :-) – 2010-11-20 19:11:00