Я могу использовать команду в Windows wmic следующим образом:
wmic datafile where name='file/program.exe' get version
Который напечатает стандартную строку как это:
Version
2.0.1.0
, который можно легко разобрать, разбив новую строку и обрезав.
Итак, я делаю обещание вызова exec следующим образом:
PromiseExec(`wmic datafile where name='${queryPath}' get version`)
.then(exeVersion => {
let versionSplit = exeVersion.stdout.split('\n');
let versionString = versionSplit[1].trim(); // "2.0.1.0"
});
/**
* @param {string} app command to execute
* @returns {Promise<{stdout:string, stderr:string, code:number}>}
*/
function PromiseExec(app) {
return new Promise((resolve, reject) => {
let child = exec(app);
let stdout = '';
let stderr = '';
child.addListener('error', reject);
child.stdout.on('data', function (data) {
stdout += data;
});
child.stderr.on('data', function (data) {
stderr += data;
});
child.addListener('close', (code) => {
resolve({ stdout, stderr, code} );
});
});
}
Примечание. Я удалил некоторые проверки ошибок для ясности.