在node-windows中重新启动服务

时间:2018-05-16 11:13:29

标签: javascript node.js windows-services daemon node-windows

使用node-windows包,我在本地安装节点服务器作为服务。然后有一个修改.env文件的接口,当我实际修改.env的配置并保存更改时,问题是服务没有按照预期重新启动,以便确认这些更改。任何人都可以指导我,如果有任何其他方法来处理从此包重新启动服务,或类似的任何其他解决方法?我实际上正试图像这样处理重启:

const path = require("path");
let Service = require("node-windows").Service;
let EventLogger = require("node-windows").EventLogger;
const Messages= require("./models/messagesModel").getInstance();    
let filePathServer = path.resolve(__dirname, "app.backend.js");

class ServiceInstall {

    constructor(envConfig) {

    this.log = new EventLogger(envConfig.SERVICE_NAME);
    this.svc = new Service({
        name: envConfig.SERVICE_NAME,
        description: envConfig.SERVICE_DESCRIPTION,
        script: filePathServer,
        wait: envConfig.SERVICE_WAIT,
        grow: envConfig.SERVICE_GROW
    });
    }

    installWindowsService() {
        // event handlers to install the service
    }

    restartWindowsService(){
            this.svc.on("stop", () => {
                this.log.info("Service " + this.svc.name + " stopped!");
                Messages.info("Service " + this.svc.name + " stopped!");
            });
            this.svc.on("start", () => {
                this.log.info("Service " + this.svc.name + " started!");
                Messages.info("Service " + this.svc.name + " started!");
            });
            this.svc.restart();
        }

    }

module.exports = ServiceInstall;

1 个答案:

答案 0 :(得分:0)

在安装过程中,node-windows主要执行两个步骤:

  1. 通过从.exe进行复制来创建winsw.exe文件,并在Windows注册表中进行相应的输入,因此Windows可以将此.exe识别为Windows服务。

  2. 使用传递给Service构造函数的值来生成具有相同名称的.xml文件。

这意味着一旦创建了.xml,除非您进行了完全的重新安装,否则,应用于构造函数输入的任何更改都不会被带入.xml文件中。 [使用svc.uninstall(),然后使用svc.install()]

如果要动态更改输入,但又不需要重新安装,则应将这些值放在config.json中,然后只需将require 中的config.json脚本,您正尝试将其托管为Windows服务。

现在,如果您对config.json进行更改,则只需要重新启动服务即可反映更改。

此外,如果您不想在每次config.json更改时都手动进行重新启动,请在nodemon中使用execPath,而不要在传递给的配置对象中使用node Service构造函数。