创建进程时是不是有系统事件?

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,也可以以管理员身份调试应用程序。 有非提升的解决方案吗?

以上是关于创建进程时是不是有系统事件?的主要内容,如果未能解决你的问题,请参考以下文章

[操作系统] 进程的生命周期

什么是守护进程?

Event事件与协程

Electron 主进程和渲染进程

Linux守护进程/精灵进程的创建

Python可移植进程间信号量/事件