如何通过Windows服务的OpenHardwareMonitor获取CPU温度?

时间:2019-01-09 12:32:27

标签: c# windows-services openhardwaremonitor

我正在尝试使用OpenHardwareMonitor来获取Windows Service项目中的CPU温度,但是在将代码作为服务运行时,它无法正常工作。

环顾如何在C#中读取CPU温度时,我偶然发现了以下线程:How to get CPU temperature?

Win32_TemperatureProbe似乎不起作用,MSAcpi_ThermalZoneTemperature始终返回相同的低值,因此自然而然地在答复中尝试了OpenHardwareMonitor解决方案。当它作为具有最高AvailablevailableRequestedExecutionLevel的控制台应用程序运行时,它可以工作,但是当作为安装为使用LocalSystem的Windows服务运行时,则不起作用。

using OpenHardwareMonitor.Hardware;

namespace Monitoring_Service
{
    public class Computer
    {

        ...

        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) { }
        }

        internal float GetTemperature()
        {
            var temp = 0f;

            UpdateVisitor updateVisitor = new UpdateVisitor();
            Computer computer = new Computer();
            computer.Open();
            computer.CPUEnabled = true;
            computer.Accept(updateVisitor);

            for (int i = 0; i < computer.Hardware.Length; i++)
            {
                if (computer.Hardware[i].HardwareType == HardwareType.CPU)
                {
                    for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
                    {
                        if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature)
                            temp =  computer.Hardware[i].Sensors[j].Value.GetValueOrDefault();
                    }
                }
            }
            computer.Close();

            return temp;
        }
    }
}

当我在控制台应用程序中作为管理计算机运行此软件时。硬件[i]。传感器有1​​9个项目,0-4是负载,5-9是温度,10-13是时钟,依此类推。这样,if语句成功,并且设置了temp变量。

当我运行与Windows服务相同的代码并调试“传感器”列表时,仅包含5个项目(0-4)已加载。怎么会这样?

0 个答案:

没有答案