Bonjour,

Je débute en nodejs et je souhaite créer une application nodejs :
  • installable (via exe, msi, ...) en mode service, c'est-à-dire tourne sur une machine allumée, mais sans aucune session ouverte ou vérouillée (donc toutes fermées)
  • fonctionnant sur Windows et linux


J'ai trouvé node-windows et node-linux mais j'ai quelques incompréhensions :

Events et les fonctions [exemple : svc.on('install', ...) et svc.install() ]
Ai-je bien compris : Les fonctions lancent les events lorsqu'elles se terminent ? [Call svc.install => fait son job => trigger svc.on('install', ...)]

Je souhaite aussi que ce service est un genre de "pop up" de paramétrage. Comme par exemple le menu de Wamp dans la barre des taches en bas a droite. Est-ce possible ?


Voilà un hello world que j'ai fait (écrire 10 messages dans un fichier log toutes les 5 secondes).
J'ai deux problèmes :
  1. J'ai créer un 2ème utilisateur admin sur mon poste : AdminDev . La service s'installe nickel, mais lorsque je veux le lancer le service ne parvient pas à ouvrir de session..
  2. Du coup j'ai voulut tester sans spécifier d'utilisateur (en commentant les lignes), mais rien ne se passe. app.js ne crée aucun fichier (ou je ne sait pas où il se trouve), rien n'est écrit dans la console avec les console.log(), pas d'erreur dans le journal d'événement, juste ce Warning:
    Child process [13316 - D:\programmes\NodeJS\node.exe --harmony D:\dev\nodejs\service\node_modules\node-windows\lib\wrapper.js --file D:\dev\nodejs\app.js --log "Hello Service wrapper" --grow 0.25 --wait 1 --maxrestarts 3 --abortonerror n --stopparentfirst undefined] finished with 1
  3. J'ai plein de demande d'autorisation (lancement d'un .exe, création d'une entrée dans le journal d'événement), y a-t-il un moyen d'avoir juste la demande d'autorisation du .exe ?


install.js
Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/** IMPORT **/
var Service = require('node-windows').Service,
		EventLogger = require('node-windows').EventLogger,
		logger = new EventLogger('Hello World');
 
const fs = require('fs');
WriteLog('Imports done');
 
/** GLOBAL VAR **/
var fileName = 'nodeService.log';
 
 
/** Service config **/
WriteLog('Service configuration :');
var svc = new Service({
  name:'Hello Service',
  description: 'NodeJs service test',
  script: 'D:\\dev\\nodejs\\app.js'
});
WriteLog('Initialization OK');
 
/*
svc.logOnAs.account = 'AdminDev';
svc.logOnAs.password = '***********';
*/
WriteLog('Credentials OK');
 
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
	WriteLog('Starting service...');
  svc.start();
  WriteLog('Started');
});
WriteLog("'install' trigger OK");
 
// Listen for the "start" event and let us know when the
// process has actually started working.
svc.on('start',function(){
	logger.info('Le service a demarrer');
  console.log(svc.name+' started!');
});
WriteLog("'start' trigger OK");
 
// Install and run
WriteLog('Starting install...');
svc.install();
 
 
function WriteLog(log) {
	var timing = new Date(),
 
	log = timing + ' - install.js | ' + log + '\r\n';
 
	fs.appendFile('service.log', log, (err) => {
		// throws an error, you could also catch it here
		if(err) {
			logger.error('Error in Logger : \n' + err);
			console.log(err);
			throw err;
		} 
	});
}


app.js
Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
logger.error('START : app.js');
//console.log('START : app.js');
 
var EventLogger = require('node-windows').EventLogger,
		logger = new EventLogger('Hello World');
const fs = require('fs');
 
 
var number = 1;
var myInt = setInterval(function () {
  WriteLog('log n°' + number);
 
  if(number >= 10) {
  	//console.log("clearing interval");
  	clearInterval(myInt);
  }
 
  number++
}, 5000);
 
function WriteLog(log) {
	var timing = new Date(),
 
	log = timing + ' - app.js | ' + log + '\n';
 
	fs.appendFile('app.log', log, (err) => {
		// throws an error, you could also catch it here
		if(err) {
			logger.error('Error in logger : \n' + err);
			//console.log(err);
			throw err;
		} 
	});
}