64 lines
2.1 KiB
JavaScript
64 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
var os = require('os');
|
|
var exec = require('child_process').exec;
|
|
|
|
var which = module.exports;
|
|
|
|
which._getError = function getError(err, stderr) {
|
|
if (err) { return err; }
|
|
if (stderr) {
|
|
err = new Error(stderr);
|
|
err.code = 'EWHICH';
|
|
return err;
|
|
}
|
|
};
|
|
|
|
module.exports.which = function (cmd, execOpts, fn) {
|
|
return module.exports._which({
|
|
mac: cmd
|
|
, linux: cmd
|
|
, win: cmd
|
|
}, execOpts, fn);
|
|
};
|
|
module.exports.launcher = function (execOpts, fn) {
|
|
return module.exports._which({
|
|
mac: 'launchctl'
|
|
, linux: 'systemctl'
|
|
, win: 'reg.exe'
|
|
}, execOpts, fn);
|
|
};
|
|
module.exports._which = function (progs, execOpts, fn) {
|
|
// could have used "command-exists" but I'm trying to stay low-dependency
|
|
// os.platform(), os.type()
|
|
if (!/^win/i.test(os.platform())) {
|
|
if (/^darwin/i.test(os.platform())) {
|
|
exec('command -v ' + progs.mac, execOpts, function (err, stdout, stderr) {
|
|
err = which._getError(err, stderr);
|
|
fn(err, progs.mac);
|
|
});
|
|
} else {
|
|
exec('command -v ' + progs.linux, execOpts, function (err, stdout, stderr) {
|
|
err = which._getError(err, stderr);
|
|
fn(err, progs.linux);
|
|
});
|
|
}
|
|
} else {
|
|
// https://stackoverflow.com/questions/17908789/how-to-add-an-item-to-registry-to-run-at-startup-without-uac
|
|
// wininit? regedit? SCM?
|
|
// REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V "My App" /t REG_SZ /F /D "C:\MyAppPath\MyApp.exe"
|
|
// https://www.microsoft.com/developerblog/2015/11/09/reading-and-writing-to-the-windows-registry-in-process-from-node-js/
|
|
// https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg-add
|
|
// https://social.msdn.microsoft.com/Forums/en-US/5b318f44-281e-4098-8dee-3ba8435fa391/add-registry-key-for-autostart-of-app-in-ice?forum=quebectools
|
|
// utils.elevate
|
|
// https://github.com/CatalystCode/windows-registry-node
|
|
exec('where ' + progs.win, execOpts, function (err, stdout, stderr) {
|
|
//console.log((stdout||'').trim());
|
|
if (stderr) {
|
|
console.error(stderr);
|
|
}
|
|
fn(err, progs.win);
|
|
});
|
|
}
|
|
};
|