机房的空调有时会失效,如不能及时觉察和处理,则可能造成很多服务机宕机,为此,能获得计算机的cpu的温度就很重要,因为环境温度升高必然会导致cpu温度升高,所以我们可以根据机房内某台计算机cpu温度升高情况来判断空调是否正常,如异常则可通过短信或邮件发出预警,达到及时处理的目的。以下是c#利用openhardwaremonitor获取cpu温度的方法,已用于某机房温度监控,仅供参考。
1.到https://openhardwaremonitor.org/下载openhardwaremonitor,这里下载的是v0.8.0-beta版,也可到https://download.csdn.net/download/jhycjhyc/11583104下载。
2.解压下载到的包,取出其中的OpenHardwareMonitorLib.dll文件。
3.启动visual studio 2017,建立一个新的控制器项目,如下图所示:
4.通过主菜单的“项目”->"添加引用“->”浏览“将OpenHardwareMonitorLib.dll文件引用到项目中。
5.在program.cs中增加”using OpenHardwareMonitor.Hardware;“和”using System.Threading;“两个语句。
6.在program.cs中增加两个类,代码如下:
public class UpdateVisitor : IVisitor
{
public void VisitComputer(IComputer computer)
{
computer.Traverse(this);
}
public void VisitHardware(IHardware hardware)
{
hardware.Update();
foreach (IHardware subHardware in hardware.SubHardware)
subHardware.Accept(this);
}
public void VisitSensor(ISensor sensor) { }
public void VisitParameter(IParameter parameter) { }
}
public class GetCPUTemp
{
public static int GetTemp()
{
//注意,必须以管理员身份运行方可。hhd只有已用空间一项,mainboard没有传感器。cpu温度
UpdateVisitor updateVisitor = new UpdateVisitor();
Computer computer = new Computer();
computer.Open();
computer.CPUEnabled = true;
// computer.MainboardEnabled = true;
// computer.HDDEnabled = true;
computer.Accept(updateVisitor);
int temperature = 0;
for (int i = 0; i < computer.Hardware.Length; i++)
{
//查找硬件类型为CPU
if (computer.Hardware[i].HardwareType == HardwareType.CPU)
{
for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
{
string str = computer.Hardware[i].Sensors.ToString();
int k = 0;
if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature && computer.Hardware[i].Sensors[j].Name == "CPU Core # 1")
//上句获得的是cpu第一个内核的温度,改变编号可获得其他内核的温度,有的计算机还有cpu封装温度传感器,对应的
// 语句为:computer.Hardware[i].Sensors[j].Name ==“CPU Package”
//并非所有计算机均有cpu内核温度传感器或封装温度传感器,有些计算机可均无(尤其是以前的一些服务器),
//有些计算机可能只有cpu内核温度传感器而没有cpu封装温度传感器。
//欲知某一特定计算机有哪些传感器,可在此计算机上运行openhardwaremonitor.exe文件。
{
temperature = Convert.ToInt32( computer.Hardware[i].Sensors[j].Value);
}
}
}
}
return temperature;
}
}
7.在program类的main方法中添加代码,如下:
static void Main(string[] args)
{
while (true)
{
Console.WriteLine(GetCPUTemp.GetTemp().ToString());
Thread.Sleep(1000);
}
}
8.生成项目,以管理员身份运行生成的可执行文件,即可实时显示CPU的温度。如果在vs下调试运行,则获得的温度为0,所以需要生成后以管理员身份运行才行。但如果是在windows桌面服务器应用的项目中,则不存在这个问题,服务启动后能正常获得CPU温度。