跳到正文
← 返回文章列表

硬件 · 2026-10-20 · 6 分钟

TrafficMonitor 添加 Intel 显卡支持

TrafficMonitor 不支持读取 Intel 显卡传感器数据,通过升级依赖 DLL 版本解决了该问题。

该文是笔者在问题解决后一个月后才撰写的(其实就是懒),对当时的具体情况记录的不够清晰,但大体流程和思路是没问题的。

前言

最近入手了一张蓝戟 Intel Arc 310 作为亮机卡使用,装机之后正常点亮,但日常使用的 TrafficMonitor 中读取不到这张 Intel 显卡的占用、温度相关数据。

通过查看 TrafficMonitor 项目 README 和 HELP 可以看到,该项目关于硬件监控部分使用了 LibreHardwareMonitor 这个开源库。

同时作者也提到,如果遇到无法读取温度之类的问题,可以下载 LibreHardwareMonitor 来看看能否直接读取温度,如果能读取,则用最新的 LibreHardwareMonitor.dll 替换掉 TrafficMonitor 根目录内的 LibreHardwareMonitorLib.dll 即可。

尝试修复

我下载了 LibreHardwareMonitor, 果然可以成功读取到 Intel 显卡占用、温度相关信息。从 Release 和 PR 记录可以发现,Intel 显卡的相关支持是在 0.9.4 版本加入的,而 TrafficMonitor 自带的依赖版本低于 0.9.4,因此才会出现无法读取相关信息的情况。

这不就简单了吗?下载最新的 LibreHardwareMonitorLib.dll 进行替换,本以为问题就会这么解决,但事情并没有这么简单。

依赖问题

替换最新的 dll 并启动后, TrafficMonitor 报错了。 让 Claude 帮我分析了下,主要原因是因为新版的 LibreHardwareMonitor 已经升级到了 .NET8 ,而 TrafficMonitor 是通过 C++ 调用的 CLR 4.x,调用不了这个程序集,必须切换到 .NET4 对应的 dll 。

还好 LibreHardwareMonitor 提供了 .NET 4.7.2 版本的构建,前往 nuget.org 下载了最新版本的 nupkg,然后使用 7z 解压,将 lib/net472/LibreHardwareMonitorLib.dll 复制并覆盖到 TrafficMonitor 中,但启动后仍然报错,大致是找不到依赖相关的问题。

再次让 Claude 出动,分析后发现是因为 LibreHardwareMonitor 调用的相关 API 内置在了 .NET8 runtime 里,而在 .NET 4.7.2 中,需要靠 NuGet 兼容 facade 程序集提供,也就是缺少相关的 dll 文件。

那就只能再次补齐 dll 依赖了,手动一个个补齐依赖太过麻烦,扯出瓜蔓连着瓜,补了 System.Memory 说不定还会再让补 System.IO.Ports。 最省事的办法,是让 nuget 自己帮我将所有的依赖都一次性计算打包出来,可以用一个简单的 dotnet 项目来补齐。

生成依赖

首先创建一个简单的 console 项目,这里先不指定 .net 版本号,因为命令行工具创建时要求最低 .net 6:

powershell
dotnet new console -o lhm-shim

然后修改项目根目录的 .csproj 文件内容如下:

xml
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net472</TargetFramework>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    <PlatformTarget>x64</PlatformTarget>
  </PropertyGroup>
</Project>

然后安装依赖:

powershell
dotnet add package Microsoft.NETFramework.ReferenceAssemblies
dotnet add package LibreHardwareMonitorLib --version 0.9.6

修改 Program.cs,引用 LibreHardwareMonitor:

csharp
using LibreHardwareMonitor.Hardware;

class Program
{
  static void Main()
  {
    var c = new Computer { IsGpuEnabled = true };
    c.Open();
    foreach (var hw in c.Hardware)
      System.Console.WriteLine($"{hw.HardwareType} - {hw.Name}");

    c.Close();
  }
}

然后在命令行中进行编译:

powershell
dotnet build -c Release

编译成功的产物会保存在 lhm-shim\bin\Release\net472 目录下。先关闭 TrafficMonitor, 然后将该目录中除过 lhm-shim* 之外的所有文件复制到 TrafficMonitor 所在根目录进行覆盖,然后再打开 TrafficMonitor,这个时候就能正常读取 Intel 显卡的传感器信息了。

标签显卡

评论