【问题标题】:JXcore native app as windows serviceJXcore 本机应用程序作为 Windows 服务
【发布时间】:2015-10-09 15:23:55
【问题描述】:

我制作了一个简单的回显服务器,我想在 Windows 下作为服务运行。 这是代码

var fs=require('fs');
var net = require('net');
var server = net.createServer(function(c) { //'connection' listener
  console.log('client connected');
  c.on('end', function() {
    console.log('client disconnected');
  });
  c.write('hello\r\n');
  c.pipe(c);
});

server.listen(8124, function() { //'listening' listener
  console.log('server bound');
});

    var fd=fs.openSync('log.txt', 'a');
    fs.writeSync(fd, 'START\r\n');
    fs.closeSync(fd);

process.on('SIGINT', function (par){

    var fd=fs.openSync('log.txt', 'a');
    fs.writeSync(fd, 'SIGINT ('+par+")\r\n");
    fs.closeSync(fd);

    process.exit(1);
});

process.on('exit', function (code){

    var fd=fs.openSync('log.txt', 'a');
    fs.writeSync(fd, 'EXIT ('+code+")\r\n");
    fs.closeSync(fd);
});

接下来我用 JXcore 编译如下:

jx package echoserver.js "echoserver" -native

然后可执行文件从控制台或资源管理器中双击运行并完成它的工作!好!

现在,我用 sc windows 工具创建一个服务

sc create echosvr full_path_to\echoserver.exe

现在 echosvr 已正确列在 windows 任务管理器的服务选项卡中。

现在不好了:我尝试以多种方式启动服务,但我总是收到一条消息,告诉我服务没有及时响应启动或控制请求。

我想念什么? 有什么建议吗?

【问题讨论】:

  • 我假设将进程用作 Windows 服务需要该应用程序中的附加功能。
  • 我假设相同...我想我应该尝试一些像nssm这样的包装器。它似乎可以满足我的需要。我会试一试,然后我会发布结果

标签: windows service jxcore


【解决方案1】:

我明白了!

我下载了nssm 并将一个可执行文件(32 位的一个,只是为了尝试)移动到 windows 目录中,我从命令提示符运行 nssm.exe 并按照nssm 链接中的说明配置服务。

> nssm install echosvr

这为配置打开了一个弹出窗口,我在其中放置了我的需求.. 那么:

> net start echosvr

服务器启动!现在它在任务管理器服务选项卡中可见。 我从任务管理器中停止了服务,日志文件如下:

START
SIGINT (undefined)
EXIT (1)

这正是我所需要的,因为它标志着一个优雅的关闭请求!

要部署这样的解决方案,nssm 提供了我一定会使用的命令行设置!

(PS:它不支持服务暂停/恢复,但这可以接受..)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2011-12-07
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多