2016-09-01 55 views
-1

我试图监视任何进程的创建和终止,而无需管理员权限的! 我发现很多贴例子像这样的:监控进程的创建和终止

// 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(); 

如果我只收到我可以确定某个进程启动或停止的事件,但如果我尝试消耗OnEventArrivede.NewEvent.Property["ProcessName"].Value我在遇到麻烦访问权限。

我的问题是现在: 为什么我能收到一般的创建和终止的信息,但如果我想获得细节出了大事我成为制约?

我可以使用Process.GetProcesses()和比较前面任何价值,我得到我自己的信息,这样我就可以无论如何得到这个信息。这似乎并不像我应该需要访问权限。

+0

Powershell脚本将是相当多的选项,而不是C#用于监控进程... – JDavila

+0

@JDavila是的,如果您没有客户希望在应用程序中看到他想要监控的所有进程的绿色小标志; ) – GreenEyedAndy

回答

0

访问某些过程,必须有特定进程创建管理员权限,或可以访问在关注过程中的组内所存在的管理员帐户。

“无法单独通过进程名称访问进程资源,但是,一旦检索到与进程资源相关联的进程组件的数组,您就可以启动,终止或以其他方式处理系统资源。”

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

本质上,的处理的阵列必须被在C#阵列访问和修改的过程创建。

过程的细节很可能需要更高的访问级别或权限。到对象的访问是基于不同的水平,如信息,错误,等。通常,使用Windows身份验证时,用户的任何其它类型的修饰可发生之前需要访问权到该对象。

+0

谢谢你的快速的答案,但你知道,甚至有可能得到任何正在运行的进程的命令行参数,所以我不知道为什么会出现得到通知,如没有简单的方法notepad.exe是在没有管理员权限的情况下启动的,或者为我想要监视的每个文件名设置Watcher。 – GreenEyedAndy