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