Сбой ManagementEventWatcher с ошибкой «Отказано в доступе» при попытке вызвать событие EventArrived в проекте WinForms в Windows 10 VS 2017 - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь создать проект, подобный диспетчеру задач, который плавно обновляет список процессов (представленных в элементе управления ListView) при каждом запуске или выходе из процесса.Мне удалось сделать это с таймерами, но это было довольно жестко и не эстетично.На этот раз я осмотрелся и нашел ответы, говорящие мне об использовании классов из библиотеки System.Management.Код, который я нашел, показан ниже.

ManagementEventWatcher processStartEvent = new ManagementEventWatcher("SELECT * FROM Win32_ProcessStartTrace");
ManagementEventWatcher processStopEvent = new ManagementEventWatcher("SELECT * FROM Win32_ProcessStopTrace");

public Form1()
{
      InitializeComponent();
      processStartEvent.Scope = new ManagementScope();
      processStartEvent.EventArrived += new EventArrivedEventHandler(UpdateProcesses);
      processStopEvent.EventArrived += new EventArrivedEventHandler(UpdateProcesses);
      processStartEvent.Start(); // Crashes here
      processStopEvent.Start(); // Crashes here
 }

Метод UpdateProcesses - это код, который обновляет содержимое ListView.

Однако, когда я выполняю проект, он выдает System.Management.ManagementException: 'Access denied 'ошибка и указывает на метод processStartEvent.Start() и метод processStopEvent.Start().

Программа отлично работает, когда я запускаю скомпилированный исполняемый файл от имени администратора, хотя я хочу иметь возможность запускать программу без администратора в случае, еслидругой пользователь желает запустить мою программу на компьютере, но у него не включен администратор.

Мой вопрос таков: как я могу остановить вывод программы из-за ошибки Access Denied без запуска программы от имени администратора?Кроме того, если кто-нибудь знает о лучшем способе обновления элемента управления ListView, не стесняйтесь, дайте мне здесь это.Заранее спасибо!

...