创建进程时是不是有系统事件?
Posted
技术标签:
【中文标题】创建进程时是不是有系统事件?【英文标题】:Is there a System event when processes are created?创建进程时是否有系统事件? 【发布时间】:2010-11-01 14:30:07 【问题描述】:创建新进程时是否有任何事件。我正在编写一个检查某些进程的 c# 应用程序,但我不想编写一个无限循环来连续遍历所有已知进程。相反,我宁愿检查创建的每个进程或遍历由事件触发的所有当前进程。有什么建议吗?
Process[] pArray;
while (true)
pArray = Process.GetProcesses();
foreach (Process p in pArray)
foreach (String pName in listOfProcesses) //just a list of process names to search for
if (pName.Equals(p.ProcessName, StringComparison.CurrentCultureIgnoreCase))
//do some stuff
Thread.Sleep(refreshRate * 1000);
【问题讨论】:
【参考方案1】:WMI 为您提供了一种方法来监听进程创建(以及大约一百万种其他事物)。见my answer here。
void WaitForProcess()
ManagementEventWatcher startWatch = new ManagementEventWatcher(
new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
startWatch.EventArrived
+= new EventArrivedEventHandler(startWatch_EventArrived);
startWatch.Start();
static void startWatch_EventArrived(object sender, EventArrivedEventArgs e)
Console.WriteLine("Process started: 0"
, e.NewEvent.Properties["ProcessName"].Value);
if (this is the process I'm interested in)
startWatch.Stop();
【讨论】:
监听此事件需要管理员权限。如果使用 Visual Studio,您只需以管理员身份运行 Visual Studio,也可以以管理员身份调试应用程序。 有非提升的解决方案吗?以上是关于创建进程时是不是有系统事件?的主要内容,如果未能解决你的问题,请参考以下文章