Node.js如何启动和停止Windows服务

15

我有一个使用nodeJS编写的应用程序,需要与作为windows服务安装的第三方应用程序通信。我的nodeJS应用程序需要该服务正在运行,但在某些情况下可能没有启动。

我正在寻找一种方法来检查此windows服务是否正在运行,如果未运行,则启动它。经过多天的搜索,我发现了许多关于将nodeJS应用程序作为windows服务运行的结果,但没有提供启动/停止已安装的windows服务的能力。

这样做有可能吗?我发现了像PSEXEC这样的工具,因此我可以使nodeJS运行这样的脚本,但最好是用nodeJS本身执行此任务。

任何相关信息都将非常有用,我很难相信其他人没有遇到过这种情况。

斯蒂芬

1个回答

15
在Windows中,您可以从命令行中键入:

# Start a service
net start <servicename>

# Stop a service
net stop <servicename>

# You can also pause and continue

所以,简单的答案是- 使用child-process在服务器启动时启动服务。代码示例如下:

var child = require('child_process').exec('net start <service>', function (error, stdout, stderr) {
    if (error !== null) {
        console.log('exec error: ' + error);
    }
    // Validate stdout / stderr to see if service is already running
    // perhaps.
});

编辑:我还发现了这个名为"windows-service"的nodejs模块。对于你试图完成的任务似乎很有希望。它的一些功能是用C++实现的,其中它尝试查询Windows服务管理器。


非常准确,使用子进程很好,谢谢。 - ste2425
2
Windows服务模块没有控制其他服务的API,它只能将当前的Node.js模块作为服务运行。 - Roland Pihlakas
太好了!这在 Windows 10 1903 上立刻就起作用了。谢谢! - Maximojo
尝试以这种方式停止服务时,我遇到了“发生语法错误5”的问题。访问被拒绝。请问有人可以帮忙吗? - Ajendra Prasad
@sabhiram- 如果我们有多个服务需要停止和启动,我们该如何在Node.js中实现呢? - Vishal I P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接