远程机器上的C#进程

远程机器上的C#进程,c#,process,remote-access,C#,Process,Remote Access,我编写了一个监视服务,它跟踪一组进程,并在服务出现异常、运行内存占用率高、超出CPU运行时间等情况时发出通知 这在我的本地计算机上运行良好,但我需要它指向远程机器并获取这些机器上的进程信息 我的方法,在当地工作: Process.GetProcesses().ToList().ForEach(p => MyProcesses.Add(p)); 这给了我一个在我的机器上的进程集合,它有更多的逻辑(按名称过滤进程等),但这就是它的本质 我需要的是: Process.GetProcesses(

我编写了一个监视服务,它跟踪一组进程,并在服务出现异常、运行内存占用率高、超出CPU运行时间等情况时发出通知

这在我的本地计算机上运行良好,但我需要它指向远程机器并获取这些机器上的进程信息

我的方法,在当地工作:

Process.GetProcesses().ToList().ForEach(p => MyProcesses.Add(p));
这给了我一个在我的机器上的进程集合,它有更多的逻辑(按名称过滤进程等),但这就是它的本质

我需要的是:

Process.GetProcesses(machineName).ToList().ForEach(p => MyProcesses.Add(p));
这显然是对访问的抱怨,问题是如何传递凭据以某种方式使用此功能

注意:我拥有访问这些进程所需的所有MachineName和凭据,但我需要在配置文件中提供这些。我可以用指定的用户名运行服务,但它仍然会抱怨访问问题。

您需要接受目标计算机名称的重载,例如:

Process[] remoteAll = Process.GetProcesses("myComputer");
从文档示例中,您将看到
GetProcessBy
方法也具有接受目标名称的重载

在后台,
进程
类使用WMI访问管理信息,如进程列表


对于高级方案,创建WMI查询以返回所需的数据(就像数据库一样)可能更好更快,而不是枚举远程进程并从每个进程提取数据

问题是我喜欢Process类简化事情的方式。但我认为实现这一目标的唯一途径是通过WMI。我会尽快调查这件事,thanks@JohanAspeling为什么?WMI不会绕过安全限制。如果计算机在同一个域中,您只需为将运行代码的帐户授予适当的权限。这也是最安全的方法。您想访问不在域中的计算机,还是需要模拟其他域帐户?这些计算机都在同一个域中,根据您的评论,我认为我应该让运行服务的用户访问包含我要监视的进程的计算机。我将在哪里授予此用户访问权限?为什么要使用单独的帐户,而不是为具有访问所有计算机权限的服务创建一个域帐户?这比存储用户名和帐户安全得多。在我们的环境中,某些机器受到限制,只能使用某些服务帐户访问这些计算机