65.9K
CodeProject 正在变化。 阅读更多。
Home

监控系统信息

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (10投票s)

2009年7月7日

CPOL

2分钟阅读

viewsIcon

44912

downloadIcon

7032

一个用于监控和收集远程机器基本系统信息的程序。

引言

监控中心是一个系统,旨在帮助您控制和监控局域网内的计算机。该系统允许您通过易于使用的界面实时查看有关计算机的有用信息,并且可以根据自己的需求进行定制。

本文提供了如何访问 Windows 操作系统上不同信息的示例,例如进程信息、性能计数器和基本系统信息。

MonitorSystem.gif

背景

该程序使用 .NET Framework 库来获取所需的信息。

使用代码

您如何使用该程序?

解压缩演示文件后,将 MonitorCenter1.0.exeServer 文件夹复制到服务器机器上的任何位置。该 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 是一个开源项目,您可以免费下载并使用它来构建任何您喜欢的图表。

上述所有代码示例都是项目源代码文件的一部分。

关注点

并非所有用户都有权限访问系统信息。此外,有时,即使系统管理员也无法访问某些数据。在访问操作系统信息时,使用 trycatch 块。

© . All rights reserved.