我试图创建一个类似于任务管理器的项目,以便在进程启动或退出时平稳地更新进程列表(在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控件的更好方法,请不要犹豫,让我在这里进行。预先感谢!