You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.9 KiB
64 lines
1.9 KiB
'use strict' |
|
|
|
const log = require('npmlog') |
|
const execFile = require('child_process').execFile |
|
const path = require('path') |
|
|
|
function logWithPrefix (log, prefix) { |
|
function setPrefix (logFunction) { |
|
return (...args) => logFunction.apply(null, [ prefix, ...args ]) // eslint-disable-line |
|
} |
|
return { |
|
silly: setPrefix(log.silly), |
|
verbose: setPrefix(log.verbose), |
|
info: setPrefix(log.info), |
|
warn: setPrefix(log.warn), |
|
error: setPrefix(log.error) |
|
} |
|
} |
|
|
|
function regGetValue (key, value, addOpts, cb) { |
|
const outReValue = value.replace(/\W/g, '.') |
|
const outRe = new RegExp(`^\\s+${outReValue}\\s+REG_\\w+\\s+(\\S.*)$`, 'im') |
|
const reg = path.join(process.env.SystemRoot, 'System32', 'reg.exe') |
|
const regArgs = ['query', key, '/v', value].concat(addOpts) |
|
|
|
log.silly('reg', 'running', reg, regArgs) |
|
const child = execFile(reg, regArgs, { encoding: 'utf8' }, |
|
function (err, stdout, stderr) { |
|
log.silly('reg', 'reg.exe stdout = %j', stdout) |
|
if (err || stderr.trim() !== '') { |
|
log.silly('reg', 'reg.exe err = %j', err && (err.stack || err)) |
|
log.silly('reg', 'reg.exe stderr = %j', stderr) |
|
return cb(err, stderr) |
|
} |
|
|
|
const result = outRe.exec(stdout) |
|
if (!result) { |
|
log.silly('reg', 'error parsing stdout') |
|
return cb(new Error('Could not parse output of reg.exe')) |
|
} |
|
log.silly('reg', 'found: %j', result[1]) |
|
cb(null, result[1]) |
|
}) |
|
child.stdin.end() |
|
} |
|
|
|
function regSearchKeys (keys, value, addOpts, cb) { |
|
var i = 0 |
|
const search = () => { |
|
log.silly('reg-search', 'looking for %j in %j', value, keys[i]) |
|
regGetValue(keys[i], value, addOpts, (err, res) => { |
|
++i |
|
if (err && i < keys.length) { return search() } |
|
cb(err, res) |
|
}) |
|
} |
|
search() |
|
} |
|
|
|
module.exports = { |
|
logWithPrefix: logWithPrefix, |
|
regGetValue: regGetValue, |
|
regSearchKeys: regSearchKeys |
|
}
|
|
|