Я пытаюсь создать проект, подобный диспетчеру задач, который плавно обновляет список процессов (представленных в элементе управления 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, не стесняйтесь, дайте мне здесь это.Заранее спасибо!