监控流程创建和终止

时间:2016-09-01 13:52:26

标签: c# .net

我尝试在没有管理员权限的情况下监控任何进程的创建和终止! 我找到了很多像这样的例子:

// query every 2 seconds
string pol = "2";

WqlEventQuery queryString = new WqlEventQuery(
    "SELECT *" +
    "  FROM __InstanceOperationEvent " +
    "WITHIN  " + pol +
    " WHERE TargetInstance ISA 'Win32_Process' ");

// You could replace the dot by a machine name to watch to that machine
ManagementScope scope = new ManagementScope(@"\\.\root\CIMV2");

// create the watcher and start to listen
watcher = new ManagementEventWatcher(scope, queryString);
watcher.EventArrived += OnEventArrived;
watcher.Start();

如果我只收到该事件,我可以确定某个进程是已启动还是已停止,但如果我尝试使用e.NewEvent.Property["ProcessName"].Value中的OnEventArrived,则会遇到访问权限问题。

我现在的问题是: 为什么我一般会收到有关创建和终止的信息,但如果我想从事件中获取详细信息,我会受到限制?

我可以使用Process.GetProcesses()并将该信息与我自己获得的任何先前值进行比较,因此无论如何我都可以获得此信息。我似乎不需要访问权限。

1 个答案:

答案 0 :(得分:0)

要访问某些流程,必须为该特定流程创建管理员权限,或者该组中存在可以访问相关流程的管理员帐户。

"您无法仅通过进程名称访问进程资源,但是,一旦检索到与进程资源关联的进程组件数组,就可以启动,终止和以其他方式操作系统资源。 "

来自:https://msdn.microsoft.com/en-us/library/z3w4xdc9(v=vs.110).aspx

实质上,必须在C#数组中创建一个进程数组来访问和修改进程。

该过程的详细信息很可能需要更高的访问级别或权限。对对象的访问基于不同的级别,例如信息,错误等。通常,使用Windows身份验证时,用户需要对该对象的访问权限才能进行任何其他类型的修改。