Fallback to VC registry detection

This commit is contained in:
2020-04-16 10:43:14 -05:00
parent ee7222c126
commit 4e7fb325ef

View File

@@ -596,65 +596,65 @@ module.exports.getMissingDependencies = dependencies => {
}; };
const Registry = require('winreg'); const Registry = require('winreg');
const checkRegistry = (dep, index, legacyRuntimeDetection) => { const checkRegistry = (dep, index) => {
if (index >= dep.registry.length) { if (index >= dep.registry.length) {
missing.push(dep); if (dep.display === 'VC Runtime 2015-2019') {
resolveIfComplete();
} else {
if (!legacyRuntimeDetection && (dep.display === 'VC Runtime 2015-2019')) {
_vcRuntimeExists() _vcRuntimeExists()
.then(exists => { .then(exists => {
if (exists) { if (!exists) {
resolveIfComplete(); missing.push(dep);
} else {
checkRegistry(dep, 0, true);
} }
resolveIfComplete();
}) })
.catch (() => { .catch(() => {
checkRegistry(dep, 0, true); missing.push(dep);
resolveIfComplete();
}) })
} else { } else {
let hive = null; missing.push(dep);
const hiveName = dep.registry[index].split('\\')[0]; resolveIfComplete();
switch (hiveName) {
case 'HKEY_CLASSES_ROOT':
hive = Registry.HKCR;
break;
case 'HKEY_CURRENT_CONFIG':
hive = Registry.HKCC;
break;
case 'HKEY_CURRENT_USER':
hive = Registry.HKCU;
break;
case 'HKEY_LOCAL_MACHINE':
hive = Registry.HKLM;
break;
case 'HKEY_USERS':
hive = Registry.HKU;
break;
default:
throw Error('Invalid registry hive: ' + hiveName);
}
const key = dep.registry[index].substr(hiveName.length);
const regKey = new Registry({
hive: hive,
key: key
});
regKey.valueExists('DisplayName', (err, exists) => {
if (err || !exists) {
regKey.valueExists('ProductName', (err, exists) => {
if (err || !exists) {
checkRegistry(dep, ++index);
} else {
resolveIfComplete();
}
});
} else {
resolveIfComplete();
}
});
} }
} else {
let hive = null;
const hiveName = dep.registry[index].split('\\')[0];
switch (hiveName) {
case 'HKEY_CLASSES_ROOT':
hive = Registry.HKCR;
break;
case 'HKEY_CURRENT_CONFIG':
hive = Registry.HKCC;
break;
case 'HKEY_CURRENT_USER':
hive = Registry.HKCU;
break;
case 'HKEY_LOCAL_MACHINE':
hive = Registry.HKLM;
break;
case 'HKEY_USERS':
hive = Registry.HKU;
break;
default:
throw Error('Invalid registry hive: ' + hiveName);
}
const key = dep.registry[index].substr(hiveName.length);
const regKey = new Registry({
hive: hive,
key: key
});
regKey.valueExists('DisplayName', (err, exists) => {
if (err || !exists) {
regKey.valueExists('ProductName', (err, exists) => {
if (err || !exists) {
checkRegistry(dep, ++index);
} else {
resolveIfComplete();
}
});
} else {
resolveIfComplete();
}
});
} }
}; };