9

我正在尝试在服务中使用 ManagementEventWatcher 来跟踪计算机何时进入和退出睡眠模式。我是 .NET 和 C# 的新手,所以我很难想出语法来完成这项工作。

我找到了一篇博客文章,详细说明了他如何使用 ManagementEventWatcher 来跟踪此状态,但他没有发布他的整个代码。我正在尝试创建一个简单的服务,该服务会创建一个 .txt 日志文件,说明计算机已暂停/恢复,但在命名空间和类型方面遇到问题。

这是 service.cs 文件的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Management;

namespace SleepNotifierService
{
    public class WqlEventQuery : EventQuery { }

    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {


            WqlEventQuery query = new WqlEventQuery("Win32_PowerManagementEvent");
            _watcher = new ManagementEventWatcher(query);
            _watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
            _watcher.Start();
        }

        protected override void OnStop()
        {
            _watcher.Stop();
        }

        void watcher_EventArrived(object sender, EventArrivedEventArgs e)
        {
            try
            {
                int eventType = Convert.ToInt32(e.NewEvent.Properties["EventType"].Value);
                switch (eventType)
                {
                    case 4:
                        Sleep();
                        break;
                    case 7:
                        Resume();
                        break;
                }
            }
            catch (Exception ex)
            {
                //Log(ex.Message);
            }
        }

        public void Sleep()
        {
        }

        public void Resume()
        {
        }

    }
}

同样,这是我第一次使用 .NET 和 C# 进行编程,所以我为我的无知道歉。

我收到命名空间错误,例如:

找不到类型或命名空间名称“ManagementEventWatcher”(您是否缺少 using 指令或程序集引用?)

谢谢,

托梅克

4

1 回答 1

7

您需要 System.Management 命名空间,它包含在您提供的代码示例中。我相信您需要在项目设置中引用 System.Management 库。请按照以下步骤执行此操作(我假设您正在起诉 Visual Studio):

转到解决方案资源管理器,展开您的项目,右键单击“引用”文件夹/选项,然后从上下文菜单中选择“添加引用”。现在选择 .Net 选项卡并从列表中选择 System.Management,然后单击确定。

于 2010-01-27T21:56:45.597 回答