如何使用C#监控进程?

3

我希望我的应用程序能够在其存在期间监视和记录在WinXP机器上启动和终止的进程。我不想获取所有正在运行的进程名称。我该如何实现这一点?欢迎任何想法..谢谢。

3个回答

1
最简单的方法,而不需要钩入任何Windows内部,就是定期轮询正在运行的进程列表。
using System.Diagnostics;


// Poll every 5 seconds
while(true)
{
    // Get a list of running processes
    Process[] processlist = Process.GetProcesses();

    // Do logging
    // ...

    Thread.Sleep(5000);
}

我不想获取所有进程的名称。我需要在我的应用程序线程运行期间启动和终止的进程名称。 - Anuya
@Anuya 在这种情况下,您需要重新表达您的问题,因为那不是您所问的。 - Winston Smith
重新表述...谢谢,现在我该如何做? - Anuya
@Anuya 你仍然可以使用上述方法,但要保留原始列表的副本。然后,在每次轮询时,与原始列表进行比较,以查看哪些进程是新的。不过,像其他答案建议的那样,使用WMI可能更好。 - Winston Smith

1
你可以使用 Process.GetProcesses 列出所有进程。
然后,你可以监视返回的进程数组中的每个进程。

0
public static void Monitor()
    { 
        ArrayList existingProcesses = GetExistingProcess();  

        while (true)
        {  
            ArrayList currentProcesses = new ArrayList();
            currentProcesses = GetCurrentProcess();

            ArrayList NewApps = new ArrayList(GetCurrentProcess());

            foreach (var p in ExistingProcess)
            {
                NewApps.Remove(p); 
            }
            string str = "";
            foreach (string NewApp in NewApps)
            {
                str = "Process Name : " + NewApp + "   Process ID : " + System.Diagnostics.Process.GetProcessesByName(NewApp)[0].Id.ToString() + " ";
            }
            MessageBox.Show(str);
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接