监控系统信息
一个用于监控和收集远程机器基本系统信息的程序。
引言
监控中心是一个系统,旨在帮助您控制和监控局域网内的计算机。该系统允许您通过易于使用的界面实时查看有关计算机的有用信息,并且可以根据自己的需求进行定制。
本文提供了如何访问 Windows 操作系统上不同信息的示例,例如进程信息、性能计数器和基本系统信息。
背景
该程序使用 .NET Framework 库来获取所需的信息。
使用代码
您如何使用该程序?
解压缩演示文件后,将 MonitorCenter1.0.exe 从 Server 文件夹复制到服务器机器上的任何位置。该 EXE 是系统的中央界面,您可以从中对您希望监控的每个客户端执行所有操作(包括位于 MonitorCenter1.0.exe 的机器)。之后,将名为 Client 的文件夹复制到您选择的位置。
您可以阅读包含在演示 zip 文件中的用户指南文档,以获取有关使用该程序的更多说明。
现在,系统已准备就绪;只需运行服务器和客户端 EXE 文件即可!以下是一些收集所需信息的示例。
读取进程信息
using System.Diagnostic;
Process[] ProcessList = Process.GetProcesses();
foreach (Process CurrProcess in ProcessList)
{
Console.WriteLine("Process Name:" + CurrProcess.ProcessName);
Console.WriteLine("Main Module FileName:" + CurrProcess.MainModule.FileName);
Console.WriteLine("Start Time:" + CurrProcess.CurrProcess.StartTime);
}
例如,进程所有者不是 Process
类的一部分,因此我们从 WMI 获取此数据。
using System.Management;
public string GetProcessOwner(int processID)
{
string owner = string.Empty;
string queryString = "Select * From Win32_Process Where ProcessID = " + processID;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(queryString);
ManagementObjectCollection processList = searcher.Get();
foreach (ManagementObject currentProcess in processList)
{
string[] argList = { string.Empty };
int returnValue = Convert.ToInt32(currentProcess.InvokeMethod("GetOwner", argList));
if (returnValue == 0)
owner = argList[0];
}
return owner;
}
为了获取操作系统性能计数器信息,例如 CPU 使用率,请使用以下代码
using System.Diagnostic;
PerformanceCounter CurrCounter = new PerformanceCounter("Processor%",
"ProcessorTime", "_Total");
int CPUTimeValue = CurrCounter.NextValue();
我们收集的信息以折线图的形式呈现,这些图表是使用 ZedGraph 构建的。ZedGraph 是一个开源项目,您可以免费下载并使用它来构建任何您喜欢的图表。
上述所有代码示例都是项目源代码文件的一部分。
关注点
并非所有用户都有权限访问系统信息。此外,有时,即使系统管理员也无法访问某些数据。在访问操作系统信息时,使用 try
和 catch
块。