gpt4 book ai didi

c# - RegistryKey 值更改时收到通知

转载 作者:太空狗 更新时间:2023-10-29 20:01:59 25 4
gpt4 key购买 nike

我想要在 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 组件,目的是从 http://msdn.microsoft.com/en-us/library/aa393042(VS.85).aspx 移植示例。到 c# 但我没有在 c# 中找到 WBEM COM 的任何使用示例

我找到了这个 http://www.codeproject.com/KB/system/registrymonitor.aspx类,但它不符合我的需要,因为此类仅监视整个 key ,我只希望在特定值(通过上述示例中的 ValueName 指定)发生更改时收到通知。

编辑:如果在 msdn vbscript 示例中将 Hive 更改为 HKEY_CURRENT_USER,它将停止工作。我找不到关于此行为的任何信息,但 a link from 2003

编辑2:RegistryEvent 或从它派生的类(例如 RegistryValueChangeEvent)不支持对 HKEY_CLASSES_ROOTHKEY_CURRENT_USER 配置单元的更改。 ( MSDN )

最佳答案

我终于解决了这个问题并让 WMI 查询版本工作:

var currentUser = WindowsIdentity.GetCurrent();
var query = new WqlEventQuery(string.Format(
"SELECT * FROM RegistryValueChangeEvent WHERE Hive='HKEY_USERS' AND KeyPath='{0}\\\\{1}' AND ValueName='{2}'",
currentUser.User.Value, keyPath.Replace("\\","\\\\"), valueName));
_watcher = new ManagementEventWatcher(query);
_watcher.EventArrived += (sender, args) => KeyValueChanged();
_watcher.Start();

我在 http://www.codeproject.com/Messages/2844468/Monitoring-HKEY_CURRENT_USER.aspx 找到了这个“hack”

关于c# - RegistryKey 值更改时收到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4233746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com