首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >注册表监视器C#

注册表监视器C#
EN

Stack Overflow用户
提问于 2009-05-05 21:24:20
回答 4查看 23K关注 0票数 23

我是WMI的新手,我需要在C#服务中实现RegistryValueChangeEvent

我需要一个事件处理程序,每当一组注册表值中的任何一个发生更改时都会触发。我希望行为类似于FileSystemWatcher类的Changed事件,但用于注册表值。

如果有其他技术可以用来完成同样的任务,我也会很感激。我的最低要求是它是一个比我现在拥有的更好的解决方案:每20秒轮询一次,并将注册表值与最后的结果进行比较。

请在您的答案中提供示例代码。如果我能得到一个只监视一个注册表值的示例,那就太好了。

我需要.Net 2.0中的解决方案

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-11 18:55:39

使用WMI有时会很有趣……我想我理解你的问题,所以看看下面的代码片段,如果它是你要找的,请告诉我。

// --------------------------------------------------------------------------------------------------------------------- 
// <copyright file="Program.cs" company="">
//   
// </copyright>
// <summary>
//   Defines the WmiChangeEventTester type.
// </summary>
// ---------------------------------------------------------------------------------------------------------------------
namespace WmiExample
{
    using System;
    using System.Management;

    /// <summary>
    /// </summary>
    public class WmiChangeEventTester
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="WmiChangeEventTester"/> class.
        /// </summary>
        public WmiChangeEventTester()
        {
            try
            {
                // Your query goes below; "KeyPath" is the key in the registry that you
                // want to monitor for changes. Make sure you escape the \ character.
                WqlEventQuery query = new WqlEventQuery(
                     "SELECT * FROM RegistryValueChangeEvent WHERE " +
                     "Hive = 'HKEY_LOCAL_MACHINE'" +
                     @"AND KeyPath = 'SOFTWARE\\Microsoft\\.NETFramework' AND ValueName='InstallRoot'");

                ManagementEventWatcher watcher = new ManagementEventWatcher(query);
                Console.WriteLine("Waiting for an event...");

                // Set up the delegate that will handle the change event.
                watcher.EventArrived += new EventArrivedEventHandler(HandleEvent);

                // Start listening for events.
                watcher.Start();

                // Do something while waiting for events. In your application,
                // this would just be continuing business as usual.
                System.Threading.Thread.Sleep(100000000);

                // Stop listening for events.
                watcher.Stop();
            }
            catch (ManagementException managementException)
            {
                Console.WriteLine("An error occurred: " + managementException.Message);
            }
        }

        /// <summary>
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The e.
        /// </param>
        private void HandleEvent(object sender, EventArrivedEventArgs e)
        {
            Console.WriteLine("Received an event.");
            // RegistryKeyChangeEvent occurs here; do something.
        }

        /// <summary>
        /// </summary>
        public static void Main()
        {
            // Just calls the class above to check for events...
            WmiChangeEventTester receiveEvent = new WmiChangeEventTester();
        }
    }
}
票数 30
EN

Stack Overflow用户

发布于 2009-05-11 18:54:21

您是否仅限于使用WMI?如果没有,您可以使用像RegistryMonitor这样的RegNotifyChangeKeyValue包装器

票数 3
EN

Stack Overflow用户

发布于 2009-05-14 00:54:35

正如其他人所指出的那样,您真的不需要WMI。我也使用过RegistryMonitor,没有任何问题。

如果您需要一个示例,页面本身上已经提供了RegistryMonitor的示例代码。您是否向下滚动到代码项目上的这一部分:

public class MonitorSample
{
    static void Main() 
    {
        RegistryMonitor monitor = new 
          RegistryMonitor(RegistryHive.CurrentUser, "Environment");
        monitor.RegChanged += new EventHandler(OnRegChanged);
        monitor.Start();

        while(true);

        monitor.Stop();
    }

    private void OnRegChanged(object sender, EventArgs e)
    {
        Console.WriteLine("registry key has changed");
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/826971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档