Created
February 2, 2016 17:47
-
-
Save TGOlson/0c0147b074d1598fcc14 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var Path = require('path'); | |
var getRegCommand = function() { | |
var command = 'reg.exe'; | |
if (process.env.SystemRoot) { | |
command = Path.join(process.env.SystemRoot, 'System32', command); | |
} | |
return command; | |
} | |
var runAsAdmin = function(args, callback) { | |
var isAdmin = true; | |
return runInternal(isAdmin, args, callback); | |
} | |
var run = function(args, callback) { | |
var isAdmin = false; | |
return runInternal(isAdmin, args, callback); | |
} | |
// TODO: take runAsAdmin? | |
var runInternal = function(isAdmin, args, callback) { | |
var runas = require('runas'); | |
var command = getRegCommand(); | |
var options = {admin: isAdmin, catchOutput: true}; | |
var result = runas(command, args, options); | |
if (result.exitCode === 0) { | |
callback(); | |
} else { | |
var message = 'Registry updated failed: ' + result.exitCode; | |
if (result.stderr) { | |
message += '\n' + result.stderr; | |
} | |
if (result.stdout) { | |
message += '\n' + result.stdout; | |
} | |
callback(new Error(message)); | |
} | |
} | |
var sequenceRuns = function(args, callback) { | |
if (args.length === 0) { return callback(); } | |
var first = args[0]; | |
var rest = args.slice(1, args.length); | |
return run(first, function(err) { | |
if (err) { return callback(err); } | |
sequenceRuns(rest, callback); | |
}); | |
}; | |
var add = function(key, vals) { | |
var args = [key].concat(vals); | |
args.unshift('add'); | |
args.push('/f'); | |
return args; | |
} | |
var key = function(pieces) { | |
return pieces.join('\\'); | |
} | |
var val = function(k, v) { | |
return ['/v', quoted(k), '/d', quoted(v)]; | |
} | |
var defaultVal = function(v) { | |
return ['/ve', '/d', quoted(v)]; | |
} | |
var quoted = function(s) { | |
return '"' + s + '"'; | |
} | |
var path = function(p) { | |
return p.replace(/\\/g, '\\\\'); | |
} | |
module.exports = { | |
getRegCommand: getRegCommand, | |
run: run, | |
runAsAdmin: runAsAdmin, | |
sequenceRuns: sequenceRuns, | |
key: key, | |
val: val, | |
defaultVal: defaultVal, | |
quoted: quoted, | |
path: path, | |
add: add, | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment