如何在windows中监视进程/程序的执行?
我们正在尝试开发一个小型应用程序,它可以监控在windows机器上执行的程序/进程 如果程序/进程不应运行,则应阻止它。它的工作原理类似于防病毒软件 这是基本思想如何在windows中监视进程/程序的执行?,windows,events,process,executable,Windows,Events,Process,Executable,我们正在尝试开发一个小型应用程序,它可以监控在windows机器上执行的程序/进程 如果程序/进程不应运行,则应阻止它。它的工作原理类似于防病毒软件 这是基本思想 我想知道如何连接到操作系统中,以获得有关试图在计算机中运行的每个程序/进程的通知。我没有尝试获取实时通知。然而,下面是如何在C中运行进程# 您还可以使用以下流程道具 StartTime-显示进程开始的时间 TotalProcessorTime-显示进程占用的CPU时间量 线程-允许访问进程中的线程集合 我将使用常量WH_GETMES
我想知道如何连接到操作系统中,以获得有关试图在计算机中运行的每个程序/进程的通知。我没有尝试获取实时通知。然而,下面是如何在C中运行进程# 您还可以使用以下流程道具
- StartTime-显示进程开始的时间
- TotalProcessorTime-显示进程占用的CPU时间量
- 线程-允许访问进程中的线程集合
最简单的方法是使用WMI。专门监视Win32_进程StartTrace。这比Win32_进程要好,因为它被设置为使用事件,而Win32_进程需要轮询,这更需要CPU。下面是如何在C#中执行此操作。首先确保已将System.Management设置为项目的参考
public System.Management.ManagementEventWatcher mgmtWtch;
public Form1()
{
InitializeComponent();
mgmtWtch = new System.Management.ManagementEventWatcher("Select * From Win32_ProcessStartTrace");
mgmtWtch.EventArrived += new System.Management.EventArrivedEventHandler(mgmtWtch_EventArrived);
mgmtWtch.Start();
}
void mgmtWtch_EventArrived(object sender, System.Management.EventArrivedEventArgs e)
{
MessageBox.Show((string)e.NewEvent["ProcessName"]);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
mgmtWtch.Stop();
}
每次启动新流程时,代码都会生成messagebox。从那里,您可以检查白名单/黑名单,并采取适当的行动。不幸的是,WMI似乎会在创建流程后5秒钟内发送通知。不适用于实时通知或处理短期任务。我在Microsoft网站上找到了一个相同任务的示例,但它也有相同的问题。嘎。。。使用WMI比手动轮询进程列表更占用CPU(它只发生在WMI服务进程而不是您的进程中)。此外,如果应用程序崩溃,订阅将继续在WMI服务中运行,占用CPU。。。
public System.Management.ManagementEventWatcher mgmtWtch;
public Form1()
{
InitializeComponent();
mgmtWtch = new System.Management.ManagementEventWatcher("Select * From Win32_ProcessStartTrace");
mgmtWtch.EventArrived += new System.Management.EventArrivedEventHandler(mgmtWtch_EventArrived);
mgmtWtch.Start();
}
void mgmtWtch_EventArrived(object sender, System.Management.EventArrivedEventArgs e)
{
MessageBox.Show((string)e.NewEvent["ProcessName"]);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
mgmtWtch.Stop();
}