首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Node.js启动更新程序并关闭主程序

Node.js启动更新程序并关闭主程序
EN

Stack Overflow用户
提问于 2019-05-23 02:23:15
回答 1查看 54关注 0票数 1

我通过pinging某个URL来检查我的应用程序是否有更新,pinging这个URL会返回我是否需要更新。

现在,我有了一个实际处理更新的powershell文件,所以我尝试从我的应用程序内部启动这个powershell文件。

我有这个工作,我可以产生我的更新程序文件,它将运行,一切都很好。但是,我的应用程序始终保持打开状态,这意味着一旦更新程序完成,我将运行它的两个实例。

在我看来,最明显的解决方案是,如果发现更新,就关闭应用程序(在生成更新程序之后)。

下面是我的代码:

代码语言:javascript
复制
child = spawn("powershell.exe",['-ExecutionPolicy', 'ByPass', '-File', require("path").resolve(__dirname, '../../../../updater.ps1')]);
child.unref();

self.close();

但是,当我尝试关闭应用程序时,更新程序似乎从未启动过。或者更确切地说,我相信它是启动的,但是当主应用程序关闭时它就会关闭。

我有一行child.unref(),我认为它应该使衍生的窗口不附加到主应用程序,但更新程序不会保持打开状态。

我还尝试添加{detached: true}作为我的spawn()命令的第三个参数,但这并没有改变它的运行方式。

我如何从我的应用程序中产生完全独立的更新程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-23 05:38:24

为了启动与应用程序分离的更新,我认为您应该使用脚本而不是内联参数。这将确保操作系统创建一个独立于节点应用程序的进程。例如:

代码语言:javascript
复制
var fs = require('fs');
var spawn = require('child_process').spawn;
var out = fs.openSync('./out.log', 'a');
var err = fs.openSync('./out.log', 'a');

var child = spawn('./myscript.sh', [], {
  detached: true,
  stdio: [ 'ignore', out, err ]
});

child.unref();

setTimeout(function(){
    process.exit();
}, 1000);

myscript.sh如下所示:

代码语言:javascript
复制
sleep 5; ls >> out2.log

上面的代码将强制节点退出(2秒后),但就在它启动bash脚本之前(它将等待5秒来运行ls命令)。运行这段代码会产生两个输出文件(out.log和out2.log)。第一个(out.log)是节点app调用子进程的输出,第二个(out2.log)是从分离的脚本重定向的脚本的结果。

一种更好、更优雅的方法是使用on函数。但这意味着您的主进程实际上将等待子进程完成执行。例如:

代码语言:javascript
复制
var fs = require('fs');
var spawn = require('child_process').spawn;
var out = fs.openSync('./out.log', 'a');
var err = fs.openSync('./out.log', 'a');

var child = spawn('ls', [], {
  detached: true,
  stdio: [ 'ignore', out, err ]
});

child.on('exit', (code) => {
    console.log(`Child exited with code ${code}`);
});

child.unref(); 

在第二个示例中,ls结果将保存在out.log文件中。因为主进程将等待子进程完成。

所以一切都取决于你愿意实现什么。第一个解决方案并不美观,但它将启动一些与您的节点应用程序完全不同的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56262833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档