Tôi muốn có thông báo khi một Khóa đăng ký cụ thể trong HKEY_CURRENT_USER
bị thay đổi. Cho đến nay tôi đã cố gắng này qua WMI
không thành công:Nhận thông báo khi Giá trị Khóa đã được thay đổi
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();
(Lỗi là "Không tìm thấy")
tiếp cận thứ hai của tôi là sử dụng WBEM Scripting COM component
với ý định cổng ví dụ từ http://msdn.microsoft.com/en-us/library/aa393042(VS.85).aspx để C# nhưng Tôi không tìm thấy bất kỳ mẫu sử dụng nào cho WBEM COM trong C#
Tôi tìm thấy lớp này là http://www.codeproject.com/KB/system/registrymonitor.aspx, nhưng nó không phù hợp với nhu cầu của tôi vì lớp này chỉ giám sát toàn bộ khóa và tôi chỉ muốn thông báo khi có giá trị cụ thể (được chỉ định qua ValueName
trong t anh ta lấy mẫu ở trên) bị thay đổi.
EDIT: Nếu bạn thay đổi Hive thành HKEY_CURRENT_USER
trong ví dụ về msdn vbscript, nó sẽ ngừng hoạt động. Tôi không thể tìm thấy bất cứ điều gì về hành vi này nhưng a link from 2003
EDIT2: Thay đổi HKEY_CLASSES_ROOT
và HKEY_CURRENT_USER
phát ban không được hỗ trợ bởi RegistryEvent
hoặc các lớp học có nguồn gốc từ nó, chẳng hạn như RegistryValueChangeEvent
. (MSDN)
Tôi tin rằng bạn có thể sửa đổi các mã dự án mã để sử dụng nhiều xử lý chờ đợi/màn hình để ít nhất là cho biết chìa khóa đã được thay đổi. Tôi không chắc chắn những gì các tác động của n màn hình là mặc dù - không có vẻ như vậy xấu: http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx :-) –