fix nvidia-smi folder search (windows)

This commit is contained in:
Sebastian Hildebrandt 2026-01-19 23:11:58 +01:00
parent 42bc5a7655
commit 5231c64cb6

View File

@ -14,11 +14,12 @@
// ----------------------------------------------------------------------------------
const fs = require('fs');
const path = require('path');
const exec = require('child_process').exec;
const execSync = require('child_process').execSync;
const util = require('./util');
let _platform = process.platform;
const _platform = process.platform;
let _nvidiaSmiPath = '';
const _linux = _platform === 'linux' || _platform === 'android';
@ -225,10 +226,8 @@ function graphics(callback) {
for (let i = 0; i < pciIDs.length; i++) {
pciIDs[i] = pciIDs[i].replace('Bus Address:', '').replace('0000:', '').trim();
}
pciIDs = pciIDs.filter(function (el) {
return el != null && el;
});
} catch (e) {
pciIDs = pciIDs.filter((el) => el != null && el);
} catch {
util.noop();
}
let i = 1;
@ -422,25 +421,24 @@ function graphics(callback) {
if (_windows) {
try {
const basePath = util.WINDIR + String.raw`\System32\DriverStore\FileRepository`;
// find all directories that have an nvidia-smi.exe file
const candidateDirs = fs.readdirSync(basePath).filter((dir) => {
if (fs.statSync([basePath, dir].join('/')).isDirectory()) {
return fs.readdirSync([basePath, dir].join('/')).includes('nvidia-smi.exe');
} else {
return false;
}
});
// use the directory with the most recently created nvidia-smi.exe file
const targetDir = candidateDirs.reduce((prevDir, currentDir) => {
const previousNvidiaSmi = fs.statSync([basePath, prevDir, 'nvidia-smi.exe'].join('/'));
const currentNvidiaSmi = fs.statSync([basePath, currentDir, 'nvidia-smi.exe'].join('/'));
return previousNvidiaSmi.ctimeMs > currentNvidiaSmi.ctimeMs ? prevDir : currentDir;
});
if (targetDir) {
_nvidiaSmiPath = [basePath, targetDir, 'nvidia-smi.exe'].join('/');
const basePath = path.join(util.WINDIR, 'System32', 'DriverStore', 'FileRepository');
// find all directories that have an nvidia-smi.exe file with date
const candidates = fs
.readdirSync(basePath, { withFileTypes: true })
.filter((dir) => dir.isDirectory())
.map((dir) => {
const nvidiaSmiPath = path.join(basePath, dir.name, 'nvidia-smi.exe');
try {
const stats = fs.statSync(nvidiaSmiPath);
return { path: nvidiaSmiPath, ctime: stats.ctimeMs };
} catch {
return null;
}
})
.filter(Boolean);
if (candidates.length > 0) {
// take the most recent
_nvidiaSmiPath = candidates.reduce((prev, curr) => (curr.ctime > prev.ctime ? curr : prev)).path;
}
} catch {
util.noop();