Как использовать ManagementEventWatcher для отслеживания приостановки / возобновления?
Я пытаюсь использовать 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 или ссылка на сборку?)
Спасибо,
Томек
1 ответ
Вам необходимо пространство имен System.Management, которое включено в предоставленный вами пример кода. Я считаю, что вам нужно обратиться к библиотеке System.Management в настройках вашего проекта. Для этого выполните следующие действия (я предполагаю, что вы подаете в суд на Visual Studio):
Перейдите в Solution Explorer и раскройте свой проект, щелкните правой кнопкой мыши папку / опцию References и выберите Add References из контекстного меню. Теперь выберите вкладку. Net, выберите System.Management из списка и нажмите OK.