From 144f5c5552afc576f11da0454be9980900e1ddff Mon Sep 17 00:00:00 2001 From: Andrey Akinshin Date: Tue, 4 Jul 2023 20:02:51 +0200 Subject: [PATCH] Fix CPU detection on Windows when wmic is not available via PATH, fix #2271 --- .../Portability/Cpu/WmicCpuInfoProvider.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/BenchmarkDotNet/Portability/Cpu/WmicCpuInfoProvider.cs b/src/BenchmarkDotNet/Portability/Cpu/WmicCpuInfoProvider.cs index 2cd380c396..d259200701 100644 --- a/src/BenchmarkDotNet/Portability/Cpu/WmicCpuInfoProvider.cs +++ b/src/BenchmarkDotNet/Portability/Cpu/WmicCpuInfoProvider.cs @@ -1,6 +1,6 @@ using System; +using System.IO; using BenchmarkDotNet.Helpers; -using JetBrains.Annotations; namespace BenchmarkDotNet.Portability.Cpu { @@ -10,17 +10,21 @@ namespace BenchmarkDotNet.Portability.Cpu /// internal static class WmicCpuInfoProvider { - internal static readonly Lazy WmicCpuInfo = new Lazy(Load); + internal static readonly Lazy WmicCpuInfo = new (Load); + + private const string DefaultWmicPath = @"C:\Windows\System32\wbem\WMIC.exe"; private static CpuInfo? Load() { if (RuntimeInformation.IsWindows()) { - string argList = $"{WmicCpuInfoKeyNames.Name}, {WmicCpuInfoKeyNames.NumberOfCores}, {WmicCpuInfoKeyNames.NumberOfLogicalProcessors}, {WmicCpuInfoKeyNames.MaxClockSpeed}"; - string content = ProcessHelper.RunAndReadOutput("wmic", $"cpu get {argList} /Format:List"); + const string argList = $"{WmicCpuInfoKeyNames.Name}, {WmicCpuInfoKeyNames.NumberOfCores}, " + + $"{WmicCpuInfoKeyNames.NumberOfLogicalProcessors}, {WmicCpuInfoKeyNames.MaxClockSpeed}"; + string wmicPath = File.Exists(DefaultWmicPath) ? DefaultWmicPath : "wmic"; + string content = ProcessHelper.RunAndReadOutput(wmicPath, $"cpu get {argList} /Format:List"); return WmicCpuInfoParser.ParseOutput(content); } return null; } } -} +} \ No newline at end of file