加 GPU 信息快照日志

This commit is contained in:
chenjiangqun
2026-06-29 10:55:05 +08:00
parent 6d31ffc78d
commit 32409ebe2b

View File

@@ -1663,6 +1663,8 @@ namespace WinISP
SetStatusMsg("Ready");
frmISP.WriteLog("===== Start ISP =====", "info");
frmISP.WriteLog("binFilePath = " + _binFilePath + ", simI2cCtrl = " + _simI2cCtrl, "info");
frmISP.WriteLog("[ENV] GPU = " + GetGpuInfoSnapshot(), "info");
//int totalFailCnt1 = 0;
int failCnt = 0;
int checkSumFailCnt = 0;
@@ -2288,5 +2290,92 @@ namespace WinISP
}
return buffer;
}
/// <summary>
/// 通过 WMI 采集所有显卡信息快照,用于诊断不同 GPU 厂商(N/A/I)下的 ISP 行为差异。
/// 该方法自带异常拦截,任何失败都不影响主升级流程。
/// </summary>
private string GetGpuInfoSnapshot()
{
var sb = new System.Text.StringBuilder();
try
{
using (var searcher = new System.Management.ManagementObjectSearcher(
"SELECT Name, AdapterCompatibility, DriverVersion, AdapterRAM, " +
"VideoProcessor, PNPDeviceID, Status FROM Win32_VideoController"))
{
int idx = 0;
foreach (var mo in searcher.Get())
{
idx++;
string name = SafeWmi(mo, "Name");
string vendor = SafeWmi(mo, "AdapterCompatibility"); // 厂商: NVIDIA / Advanced Micro Devices / Intel
string driverVer = SafeWmi(mo, "DriverVersion");
string ramStr = SafeWmi(mo, "AdapterRAM");
string gpuProc = SafeWmi(mo, "VideoProcessor");
string pnp = SafeWmi(mo, "PNPDeviceID");
string status = SafeWmi(mo, "Status");
// 归一化厂商标识,方便日志里一眼区分 N/A/I 卡
string vendorTag = ClassifyGpuVendor(vendor, name, pnp);
string ramMB = "N/A";
long ramBytes;
if (long.TryParse(ramStr, out ramBytes) && ramBytes > 0)
ramMB = (ramBytes / 1024 / 1024) + "MB";
sb.Append("[GPU#" + idx + "] tag=" + vendorTag
+ " name=" + name
+ " vendor=" + vendor
+ " driver=" + driverVer
+ " ram=" + ramMB
+ " proc=" + gpuProc
+ " status=" + status
+ " pnp=" + pnp
+ " | ");
}
if (idx == 0)
sb.Append("No Win32_VideoController found.");
}
}
catch (Exception ex)
{
sb.Append("GetGpuInfoSnapshot EXCEPTION: " + ex.Message);
}
return sb.ToString();
}
/// <summary>WMI 字段安全读取,避免某些字段为 null 抛异常。</summary>
private string SafeWmi(System.Management.ManagementBaseObject mo, string prop)
{
try
{
var v = mo[prop];
return v == null ? "null" : v.ToString().Trim();
}
catch
{
return "err";
}
}
/// <summary>根据厂商字符串/名称/PNPDeviceID 的 VEN_ 归类为 N/A/I/Other。</summary>
private string ClassifyGpuVendor(string vendor, string name, string pnp)
{
string s = ((vendor ?? "") + " " + (name ?? "")).ToUpperInvariant();
string p = (pnp ?? "").ToUpperInvariant();
// 优先用 PCI VendorID 判断,最准
if (p.Contains("VEN_10DE")) return "N(NVIDIA)";
if (p.Contains("VEN_1002")) return "A(AMD)";
if (p.Contains("VEN_8086")) return "I(Intel)";
// 退化到字符串匹配
if (s.Contains("NVIDIA")) return "N(NVIDIA)";
if (s.Contains("AMD") || s.Contains("ADVANCED MICRO") || s.Contains("RADEON") || s.Contains("ATI")) return "A(AMD)";
if (s.Contains("INTEL")) return "I(Intel)";
return "Other";
}
}
}