我编写了一个监控服务来跟踪一组进程,并在服务行为异常、内存使用率高、超出 CPU 运行时间等时发出通知。
这在我的本地计算机上运行良好,但我需要它指向远程机器并获取这些机器上的进程信息。
我的方法,在 Local 上工作:
Process.GetProcesses().ToList().ForEach(p => MyProcesses.Add(p));
这在我的机器上提供了一个进程集合,它有更多的逻辑(按名称过滤进程等),但这就是它的目的。
我需要什么:
Process.GetProcesses(machineName).ToList().ForEach(p => MyProcesses.Add(p));
这显然是对 Access 的提示,问题是我如何传递凭据才能以某种方式使用此功能?
注意:我拥有访问这些进程所需的所有机器名称和凭据,但我需要在配置文件中提供这些信息。我可以使用指定的用户名运行该服务,但它仍然提示无法访问。
您需要 GetProcesses(string)接受目标机器名称的重载,例如:
Process[] remoteAll = Process.GetProcesses("myComputer");
从文档示例中,您将看到 GetProcessBy
方法也有接受目标名称的重载。
在底层,Process
类使用 WMI 访问进程列表等管理信息。
对于高级方案,创建将返回所需数据的 WMI 查询可能更好更快,就像数据库一样,而不是枚举远程进程并从每个进程中提取数据。
我是一名优秀的程序员,十分优秀!