尝试在Windows 10 VS 2017 WinForms项目中调用EventArrived事件时,ManagementEventWatcher失败并显示访问被拒绝错误

时间:2019-05-30 21:23:01

标签: c# listview events process system.management

我试图创建一个类似于任务管理器的项目,以便在进程启动或退出时平稳地更新进程列表(在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()方法。

当我以Admin身份运行编译后的可执行文件时,该程序运行得很好,尽管我希望能够在没有Admin的情况下运行该程序,以防其他用户希望在计算机上运行我的程序但未启用Admin。 >

我的问题是:在不以管理员身份运行该程序的情况下,如何阻止该程序引发Access Denied错误?另外,如果有人知道更新ListView控件的更好方法,请不要犹豫,让我在这里进行。预先感谢!

0 个答案:

没有答案