HKEY_CURRENT_USER
'daki belirli bir Kayıt Defteri Anahtarı değiştirildiğinde bir bildirim istiyorum. Şimdiye kadar hiçbir başarı ile WMI
yoluyla bu çalıştı:RegistryKey Değeri değiştirildiği zaman bildirim alın
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();
(Hata "Bulunamadı" oldu)
Benim ikinci yaklaşımdı C# için http://msdn.microsoft.com/en-us/library/aa393042(VS.85).aspx limana niyetiyle örnek WBEM Scripting COM component
kullanılarak fakat Ben WBEM COM için kullanım örnekleri bulamadık C#
Bu http://www.codeproject.com/KB/system/registrymonitor.aspx sınıfını buldum, ancak bu sınıf yalnızca tüm anahtarı izlediğinden ve yalnızca belirli bir değer olduğunda bildirim almak istediğim için ihtiyaçlarıma uymuyor (ValueName
aracılığıyla t Yukarıdaki örnekler) değişti.
DÜZENLEME: Kovanı msdn vbscript örneğinde HKEY_CURRENT_USER
olarak değiştirirseniz, çalışmayı durdurur. Bu davranış hakkında bir şey ama bulamadık a link from 2003
EDIT2: HKEY_CLASSES_ROOT
ve HKEY_CURRENT_USER
kovanlara Değişiklikler böyle RegistryValueChangeEvent
olarak ondan türetilen RegistryEvent
veya sınıflar tarafından desteklenmemektedir. (MSDN)
kısmındaki "kesmek" bulundu Birden çok bekletme tutamaçlarını/monitörünü kullanmak için kod, en azından hangi anahtarın değiştirildiğini söyler. N monitörlerin etkilerinin ne olduğundan emin değilim - bu kadar kötü görünmüyor: http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx :-) –