注册表监视程序C#实现RegistryKeyChangeEvent

注册表监视程序C#实现RegistryKeyChangeEvent,c#,event-handling,registry,windows-xp,C#,Event Handling,Registry,Windows Xp,好的,我试着看了。我遵循我的密码- // Construct the query string:HKEY_LOCAL_MACHINE string queryString = string.Format(@"SELECT * FROM RegistryKeyChangeEvent WHERE Hive = 'HKEY_LOCAL_MACHINE' AND KeyPath = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall' ");

好的,我试着看了。我遵循我的密码-

// Construct the query string:HKEY_LOCAL_MACHINE
string queryString = string.Format(@"SELECT * FROM RegistryKeyChangeEvent WHERE Hive = 'HKEY_LOCAL_MACHINE' AND KeyPath = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall' ");

WqlEventQuery query = new WqlEventQuery();
query.QueryString = queryString;
query.EventClassName = "RegistryKeyChangeEvent";
query.WithinInterval = new TimeSpan(0, 0, 0, 1);
this.Query = query;

this.EventArrived += new EventArrivedEventHandler(RegistryWatcher_EventArrived);

不幸的是,当我调用
Start()
时,它引发了一个异常-ManagementException,并说“不可解析的查询”。

经过一些解决方法后,我找到了用ManagementScope而不是WqlEventQuery一次性解决问题的方法:

ManagementScope Scope = new ManagementScope("\\\\.\\root\\default");
EventQuery Query = new EventQuery(@"SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND KeyPath='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall'");
ManagementEventWatcher watcher = new ManagementEventWatcher(Scope, Query);
m_watcher.EventArrived += new EventArrivedEventHandler(RegistryWatcher_EventArrived);
m_watcher.Start();

它解析查询的方式似乎有问题,但现在可以了。

什么时候触发事件?