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);
 | |
|     });
 | |
|   }
 | |
| };
 |