mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-10-29 15:25:01 -04:00 
			
		
		
		
	Fixed MeshCentral running as a Windows service.
This commit is contained in:
		
							parent
							
								
									2429a00907
								
							
						
					
					
						commit
						d28454c5ec
					
				| @ -9,7 +9,7 @@ | |||||||
| // If app metrics is available
 | // If app metrics is available
 | ||||||
| if (process.argv[2] == '--launch') { try { require('appmetrics-dash').monitor({ url: '/', title: 'MeshCentral', port: 88, host: '127.0.0.1' }); } catch (e) { } } | if (process.argv[2] == '--launch') { try { require('appmetrics-dash').monitor({ url: '/', title: 'MeshCentral', port: 88, host: '127.0.0.1' }); } catch (e) { } } | ||||||
| 
 | 
 | ||||||
| function CreateMeshCentralServer(config) { | function CreateMeshCentralServer(config, args) { | ||||||
|     var obj = {}; |     var obj = {}; | ||||||
|     obj.db; |     obj.db; | ||||||
|     obj.webserver; |     obj.webserver; | ||||||
| @ -27,7 +27,7 @@ function CreateMeshCentralServer(config) { | |||||||
|     obj.crypto = require('crypto'); |     obj.crypto = require('crypto'); | ||||||
|     obj.exeHandler = require('./exeHandler.js'); |     obj.exeHandler = require('./exeHandler.js'); | ||||||
|     obj.platform = require('os').platform(); |     obj.platform = require('os').platform(); | ||||||
|     obj.args = require('minimist')(process.argv.slice(2)); |     obj.args = args; | ||||||
|     obj.common = require('./common.js'); |     obj.common = require('./common.js'); | ||||||
|     obj.certificates = null; |     obj.certificates = null; | ||||||
|     obj.connectivityByNode = {};      // This object keeps a list of all connected CIRA and agents, by nodeid->value (value: 1 = Agent, 2 = CIRA, 4 = AmtDirect)
 |     obj.connectivityByNode = {};      // This object keeps a list of all connected CIRA and agents, by nodeid->value (value: 1 = Agent, 2 = CIRA, 4 = AmtDirect)
 | ||||||
| @ -108,7 +108,7 @@ function CreateMeshCentralServer(config) { | |||||||
|         if ((obj.service != null) && ((obj.args.install == true) || (obj.args.uninstall == true) || (obj.args.start == true) || (obj.args.stop == true) || (obj.args.restart == true))) { |         if ((obj.service != null) && ((obj.args.install == true) || (obj.args.uninstall == true) || (obj.args.start == true) || (obj.args.stop == true) || (obj.args.restart == true))) { | ||||||
|             var env = [], xenv = ['user', 'port', 'aliasport', 'mpsport', 'mpsaliasport', 'redirport', 'exactport', 'debug']; |             var env = [], xenv = ['user', 'port', 'aliasport', 'mpsport', 'mpsaliasport', 'redirport', 'exactport', 'debug']; | ||||||
|             for (var i in xenv) { if (obj.args[xenv[i]] != null) { env.push({ name: 'mesh' + xenv[i], value: obj.args[xenv[i]] }); } } // Set some args as service environement variables.
 |             for (var i in xenv) { if (obj.args[xenv[i]] != null) { env.push({ name: 'mesh' + xenv[i], value: obj.args[xenv[i]] }); } } // Set some args as service environement variables.
 | ||||||
|             var svc = new obj.service({ name: 'MeshCentral', description: 'MeshCentral Remote Management Server', script: obj.path.join(__dirname, 'meshcentral.js'), env: env, wait: 2, grow: .5 }); |             var svc = new obj.service({ name: 'MeshCentral', description: 'MeshCentral Remote Management Server', script: obj.path.join(__dirname, 'winservice.js'), env: env, wait: 2, grow: .5 }); | ||||||
|             svc.on('install', function () { console.log('MeshCentral service installed.'); svc.start(); }); |             svc.on('install', function () { console.log('MeshCentral service installed.'); svc.start(); }); | ||||||
|             svc.on('uninstall', function () { console.log('MeshCentral service uninstalled.'); process.exit(); }); |             svc.on('uninstall', function () { console.log('MeshCentral service uninstalled.'); process.exit(); }); | ||||||
|             svc.on('start', function () { console.log('MeshCentral service started.'); process.exit(); }); |             svc.on('start', function () { console.log('MeshCentral service started.'); process.exit(); }); | ||||||
| @ -196,6 +196,9 @@ function CreateMeshCentralServer(config) { | |||||||
|     obj.performServerCertUpdate = function () { console.log('Updating server certificates...'); process.exit(200); } |     obj.performServerCertUpdate = function () { console.log('Updating server certificates...'); process.exit(200); } | ||||||
| 
 | 
 | ||||||
|     obj.StartEx = function () { |     obj.StartEx = function () { | ||||||
|  |         //var wincmd = require('node-windows');
 | ||||||
|  |         //wincmd.list(function (svc) { console.log(svc); }, true);
 | ||||||
|  | 
 | ||||||
|         // Write the server state
 |         // Write the server state
 | ||||||
|         obj.updateServerState('state', 'starting'); |         obj.updateServerState('state', 'starting'); | ||||||
| 
 | 
 | ||||||
| @ -428,6 +431,7 @@ function CreateMeshCentralServer(config) { | |||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 obj.debug(1, 'Server started'); |                 obj.debug(1, 'Server started'); | ||||||
|  |                 if (obj.args.nousers == true) { obj.updateServerState('nousers', '1'); } | ||||||
|                 obj.updateServerState('state', 'running'); |                 obj.updateServerState('state', 'running'); | ||||||
|             }); |             }); | ||||||
|         }); |         }); | ||||||
| @ -1110,18 +1114,26 @@ process.on('SIGINT', function () { if (meshserver != null) { meshserver.Stop(); | |||||||
| 
 | 
 | ||||||
| // Load the really basic modules
 | // Load the really basic modules
 | ||||||
| var meshserver = null; | var meshserver = null; | ||||||
| InstallModules(['minimist'], function () { | function mainStart(args) { | ||||||
|     // Get the server configuration
 |     InstallModules(['minimist'], function () { | ||||||
|     var config = getConfig(); |         // Get the server configuration
 | ||||||
|     if (config == null) { process.exit(); } |         var config = getConfig(); | ||||||
|  |         if (config == null) { process.exit(); } | ||||||
| 
 | 
 | ||||||
|     // Build the list of required modules
 |         // Build the list of required modules
 | ||||||
|     var modules = ['ws', 'nedb', 'https', 'unzip', 'xmldom', 'express', 'archiver', 'multiparty', 'node-forge', 'express-ws', 'compression', 'body-parser', 'connect-redis', 'express-session', 'express-handlebars']; |         var modules = ['ws', 'nedb', 'https', 'unzip', 'xmldom', 'express', 'archiver', 'multiparty', 'node-forge', 'express-ws', 'compression', 'body-parser', 'connect-redis', 'express-session', 'express-handlebars']; | ||||||
|     if (require('os').platform() == 'win32') { modules.push('node-sspi'); modules.push('node-windows'); } // Add Windows modules
 |         if (require('os').platform() == 'win32') { modules.push('node-sspi'); modules.push('node-windows'); } // Add Windows modules
 | ||||||
|     if (config.letsencrypt != null) { modules.push('greenlock'); modules.push('le-store-certbot'); modules.push('le-challenge-fs'); modules.push('le-acme-core'); } // Add Greenlock Modules
 |         if (config.letsencrypt != null) { modules.push('greenlock'); modules.push('le-store-certbot'); modules.push('le-challenge-fs'); modules.push('le-acme-core'); } // Add Greenlock Modules
 | ||||||
|     if (config.settings.mongodb != null) { modules.push('mongojs'); } // Add MongoDB
 |         if (config.settings.mongodb != null) { modules.push('mongojs'); } // Add MongoDB
 | ||||||
|     if (config.smtp != null) { modules.push('nodemailer'); } // Add SMTP support
 |         if (config.smtp != null) { modules.push('nodemailer'); } // Add SMTP support
 | ||||||
| 
 | 
 | ||||||
|     // Install any missing modules and launch the server
 |         // Install any missing modules and launch the server
 | ||||||
|     InstallModules(modules, function () { meshserver = CreateMeshCentralServer(config); meshserver.Start(); }); |         InstallModules(modules, function () { meshserver = CreateMeshCentralServer(config, args); meshserver.Start(); }); | ||||||
| }); |     }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | if (require.main === module) { | ||||||
|  |     mainStart(require('minimist')(process.argv.slice(2))); // Called directly, launch normally.
 | ||||||
|  | } else { | ||||||
|  |     module.exports.mainStart = mainStart; // Required as a module, useful for winservice.js
 | ||||||
|  | } | ||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "meshcentral", |   "name": "meshcentral", | ||||||
|   "version": "0.1.5-a", |   "version": "0.1.5-c", | ||||||
|   "keywords": [ |   "keywords": [ | ||||||
|     "Remote Management", |     "Remote Management", | ||||||
|     "Intel AMT", |     "Intel AMT", | ||||||
|  | |||||||
							
								
								
									
										11
									
								
								winservice.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								winservice.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | /** | ||||||
|  | * @description MeshCentral main module | ||||||
|  | * @author Ylian Saint-Hilaire | ||||||
|  | * @copyright Intel Corporation 2018 | ||||||
|  | * @license Apache-2.0 | ||||||
|  | * @version v0.0.1 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | // This module is only called when MeshCentral is running as a Windows service.
 | ||||||
|  | // In this case, we don't want to start a child process, so we launch directly without arguments.
 | ||||||
|  | require('./meshcentral.js').mainStart({ "launch": true }); | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user