我想监视.net core 2.2中的远程计算机进程内存使用情况。我的应用程序将在Intranet中运行,并检查远程计算机的CPU使用率,进程的内存使用率。开发自己的应用程序性能监视应用程序。
尝试使用System.Diagnostics的'Process'类,但得到System.InvalidOperationException:'无法连接到远程计算机。'错误消息。使用的计算机名称,但出现相同的错误。
Process[] remoteByName = Process.GetProcessesByName("notepad", "\\192.168.3.114");
或
Process[] remoteByName = Process.GetProcessesByName("notepad", "192.168.3.114");
据我所知,Process
类使用WMI在远程计算机上执行操作。如果Process
类接口不足以完成您的任务,则可以直接使用WMI queries。
默认情况下,Process
类使用当前的Windows凭据来授权您在远程计算机上。如果您的远程计算机具有不同的登录凭据,则可以switch context进行正确的授权。这是一个棘手的解决方案,但它可以工作。检查this article以了解如何完成。
无论如何,您可以使用我之前提到的WMI查询来执行授权并获取所需的数据。它是更复杂但灵活的解决方案。
当然,防火墙可以阻止远程连接。 WMI默认使用端口135来访问远程计算机,因此您需要在目标计算机上将其打开。
我建议您检查official documentation有关WMI与远程计算机的连接以正确设置所有配置。
您可以使用客户端-服务器体系结构执行此类监视任务。只需创建一个服务器应用程序,该服务器应用程序将用于聚合来自客户端的信息。接下来,创建一个客户端应用程序,该客户端应用程序将用于收集监视数据并将其发送到服务器。然后,只需将许多客户端应用程序部署到目标计算机,然后将其配置为将所有必需的信息发送到服务器即可。相应地部署一个服务器应用程序。
此体系结构允许您创建自己的安全协议,用于客户端和服务器之间的消息传递。您可以选择应用程序将要通信的端口。您还可以创建新的/删除旧的客户端,而不会影响其他已部署的应用程序(客户端和服务器)。许多现有的流行监视系统(例如Zabbix)都使用此体系结构来执行系统监视。
这样就无需配置到目标计算机的远程连接。客户端应用程序可以使用普通的Process
类从操作系统收集所有必需的数据,然后使用HttpClient
将其发送到服务器。同样,此体系结构更适合于监视,因为有些任务无法使用远程连接执行。