Я хочу получать уведомление, когда конкретный ключ реестра в HKEY_CURRENT_USER
изменяется.До сих пор я пробовал это через 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 #, но я не нашел примеров использования для WBEM COM в c #
Я нашел этот класс http://www.codeproject.com/KB/system/registrymonitor.aspx, но он не соответствовал моемунуждается в этом, поскольку этот класс контролирует только весь ключ, а я хочу получать уведомление только тогда, когда изменяется конкретное значение (указанное с помощью ValueName
в приведенных выше примерах).
РЕДАКТИРОВАТЬ: Если вы измените Hive на HKEY_CURRENT_USER
в примере msdn vbscript он перестает работать.Я ничего не мог найти об этом поведении, но ссылка от 2003
EDIT2: Изменения в кустах HKEY_CLASSES_ROOT
и HKEY_CURRENT_USER
не поддерживаются RegistryEvent
или классами, производными отэто, например, RegistryValueChangeEvent
.( MSDN )