Skip to content

Instantly share code, notes, and snippets.

@TGOlson
Created February 2, 2016 17:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save TGOlson/0c0147b074d1598fcc14 to your computer and use it in GitHub Desktop.
Save TGOlson/0c0147b074d1598fcc14 to your computer and use it in GitHub Desktop.
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