Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 监视进程的创建和终止_C#_.net - Fatal编程技术网

C# 监视进程的创建和终止

C# 监视进程的创建和终止,c#,.net,C#,.net,我尝试在没有管理员权限的情况下监视任何进程的创建和终止! 我发现了许多像这样的例子: // query every 2 seconds string pol = "2"; WqlEventQuery queryString = new WqlEventQuery( "SELECT *" + " FROM __InstanceOperationEvent " + "WITHIN " + pol + " WHERE TargetInstance ISA 'Win

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

// 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();
如果我只收到事件,我可以确定进程是启动了还是停止了,但是如果我试图使用
OnEventArrived
中的
e.NewEvent.Property[“ProcessName”].Value
,我会遇到访问权限问题

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


我可以使用
Process.GetProcesses()
并将该信息与我自己获得的任何以前的值进行比较,这样我仍然可以获得该信息。似乎我不需要访问权限。

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

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

发件人:

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


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

对于监控流程而言,Powershell脚本将是一个相当不错的选择,而不是C#…@JDavila yes,如果您没有客户希望在应用程序中看到他希望监控的所有流程的绿色标志;-)感谢您的快速回答,但是您知道,甚至可以获取任何正在运行的进程的命令行参数,因此我不知道为什么没有简单的方法来获得通知,例如,notepad.exe是在没有管理员权限的情况下启动的,或者为我要监视的每个文件名设置了一个监视程序。