【问题标题】:Using NSSM to start a NodeJs Child process within a windows service is not working使用 NSSM 在 Windows 服务中启动 NodeJs 子进程不起作用
【发布时间】:2019-01-11 01:16:24
【问题描述】:

所以我目前有一个 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。

【问题讨论】:

    标签: java node.js windows-services nssm


    【解决方案1】:

    请务必在您服务的登录选项卡上设置您的用户帐户:

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

    这些环境变量可能在您的“本地系统”帐户中不可用,这就是您在那里运行 java 时遇到问题的原因...

    【讨论】:

    • 您好 CoreTech,感谢您的回复。实际上,常规的 HelloWorld.jar 文件在服务中运行得很好......问题是我试图运行的 jar 文件正在尝试打印到本地打印机,这似乎无法运行。正如我所说,当我直接从命令提示符运行它时,这一切都有效,这让我感到困惑。我还将登录用户更改为管理员,这似乎没有什么不同。似乎如果我的 jar 正在做更多的事情,那么只是打印文本,它似乎不想从服务中工作。
    • 您是否尝试过设置您在命令提示符下正常运行时登录的相同的用户帐户?管理员可能没有安装所有必要的软件。
    【解决方案2】:

    我试图打印到标签打印机,结果证明这是打印机驱动程序本身的问题。似乎从服务打印很容易出现问题,所以我走了一条不同的路线。我最终做的是创建了一个自托管桌面应用程序,该应用程序最小化到 Windows 上的系统托盘。上述应用程序在 mac 和 linux 中都能正常运行。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多