在Windows服务中使用NSSM启动NodeJs子进程不起作用

时间:2019-01-11 01:16:25

标签: java node.js windows-services nssm

因此,我目前有一个Nodejs应用程序,该应用程序会生成一个执行Java应用程序的子进程,当直接从命令提示符处运行时,此程序运行良好。

http.createServer(function (request, response) {

console.log('Started Executing Request! \n' );

const { exec } = require('child_process');
exec('"C:\\Program Files\\Java\\jdk1.8.0_172\\bin\\java.exe" -jar "C:\\Temp\\myjava.jar"', (err, stdout, stderr) => {
  if (err) {
      console.log('There was an error! ' + err);
    // node couldn't execute the command
    return;
  }

  // the *entire* stdout and stderr (buffered)
  console.log('stdout: ' + stdout);
  console.log('stderr: ' + stderr);
});

console.log('Finished Executing Request! \n' );
}).listen(8087);

// Console will print the message
console.log('Server running at http://127.0.0.1:8087/ \n');

我的问题是,将其放入服务时,它似乎不想执行Java应用程序。我将其输出到日志文件,并且确实具有“已开始执行请求”和“已完成执行请求!”。在日志中,但未执行Java。

2 个答案:

答案 0 :(得分:1)

请确保在服务的“登录”标签上设置用户帐户:

enter image description here

指定“直接从命令提示符运行”时登录的帐户,以便Java可以找到执行工作所需的重要环境变量(例如JAVA_HOME)。

这些环境变量可能在“本地系统”帐户中不可用,这就是为什么在那里运行Java时遇到麻烦的原因...

答案 1 :(得分:0)

我试图打印到标签打印机,所以原来是打印机驱动程序本身存在问题。似乎从服务打印很容易出现问题,所以我走了一条不同的路线。我最终要做的是创建了一个自我托管的桌面应用程序,该应用程序最小化了Windows上的系统托盘。上面的应用程序可以在Mac和Linux上正常工作。