我尝试在没有管理员权限的情况下监控任何进程的创建和终止! 我找到了很多像这样的例子:
// 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()
并将该信息与我自己获得的任何先前值进行比较,因此无论如何我都可以获得此信息。我似乎不需要访问权限。
答案 0 :(得分:0)
要访问某些流程,必须为该特定流程创建管理员权限,或者该组中存在可以访问相关流程的管理员帐户。
"您无法仅通过进程名称访问进程资源,但是,一旦检索到与进程资源关联的进程组件数组,就可以启动,终止和以其他方式操作系统资源。 "
来自:https://msdn.microsoft.com/en-us/library/z3w4xdc9(v=vs.110).aspx
实质上,必须在C#数组中创建一个进程数组来访问和修改进程。
该过程的详细信息很可能需要更高的访问级别或权限。对对象的访问基于不同的级别,例如信息,错误等。通常,使用Windows身份验证时,用户需要对该对象的访问权限才能进行任何其他类型的修改。