首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在windows中监控进程/程序的执行?

如何在windows中监控进程/程序的执行?
EN

Stack Overflow用户
提问于 2009-02-04 07:15:17
回答 3查看 19K关注 0票数 10

我们正在尝试开发一个小应用程序,它可以监控在windows机器上执行的程序/进程。

如果程序/进程不应该运行,它应该被阻塞。它的工作原理类似于杀毒软件。

这是基本的想法。

我想知道连接到操作系统的方法,以便获得关于试图在机器上运行的每个程序/进程的通知。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-15 04:04:43

最简单的方法是使用WMI。具体监控Win32_ProcessStartTrace。这比Win32_Process更好,因为它被设置为使用事件,而Win32_Process需要轮询,这需要更多的CPU。下面是如何在C#中做到这一点。首先,确保将System.Management设置为项目的引用。

代码语言:javascript
复制
    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();
    }

每次启动新进程时,代码都会生成一个消息框。从那里,您可以检查白名单/黑名单,并采取适当的行动。

票数 11
EN

Stack Overflow用户

发布于 2009-02-04 07:51:39

我还没有尝试过获得实时通知。无论如何,下面是如何在C#中运行进程

代码语言:javascript
复制
using System.Diagnostics;

 //Somewhere in your method

Process[] runningList = Process.GetProcesses();

foreach(Process p in runningList){
Console.WriteLine("Process: {0} ID: {1}", p.ProcessName, p.Id);
}

您还可以使用流程的以下特性

  • StartTime -显示进程started
  • TotalProcessorTime的时间-显示进程占用的
  • 线程的时间量-用于访问process

中的线程集合

票数 0
EN

Stack Overflow用户

发布于 2009-02-04 08:30:32

我会用常量WH_GETMESSAGE检查Win32-api SetWindowsHookEx,以便在创建新窗口时向您的程序添加回调。

http://pinvoke.net/default.aspx/user32.SetWindowsHookEx

谷歌API和WH_GETMESSAGE可以找到更多信息。

还可以查看以下文章/代码库:http://www.vbaccelerator.com/home/Vb/Code/Libraries/Hooks/vbAccelerator_Hook_Library/article.asp

http://www.codeproject.com/KB/DLL/hooks.aspx?fid=2061&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=76&select=726975

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/510372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档