在Windows上启动exe时,nodejs子进程中没有stdout

时间:2018-07-21 19:03:32

标签: node.js windows child-process

我试图通过nodejs启动Windows程序,并使其输出在nodejs中使用。

它似乎与Node.js Child process can not catch windows exe file's output类似,但是没有解决此问题的方法,因此我尝试在这里再次提出问题。

对于我来说,我尝试启动数据库并等待其输出完成初始化(需要一些时间)。

当我尝试直接执行exe时,我在输出流上什么都没有收到(请参见下面的代码)。即使我分离它并通过任务管理器杀死程序,也可能是因为缓冲了输出。

const arangoDb = spawn("arangod.exe", {
        cwd: paths.arangodb + "/usr/bin/",
        detached: false,
        shell: true,
        windowsHide: false,
    }, (error, stdout, stderr) => {
        console.log('spawn callback', error, stdout, stderr)
    }
);

arangoDb.stdout.on("data", function (data) {
    console.log('out data', data.toString())
});

arangoDb.stdout.on("end", function (data) {
    console.log('out end', data.toString())
});

我实际上在听任何stdout | in | err事件,但是出于可读性考虑,我缩短了代码。

正如在上述问题的答案中提到的那样,我还尝试启动cmd.exe并发送命令以启动“ arangod.exe”:

const arangoDb = spawn("cmd.exe", {
        cwd: paths.arangodb + "/usr/bin/",
        detached: false,
        shell: true,
        windowsHide: false,
    }, (error, stdout, stderr) => {
        console.log('spawn callback', error, stdout, stderr)
    }
);

arangoDb.stdout.on("data", function (data) {
    console.log('out data', data.toString())
});

arangoDb.stdout.on("end", function (data) {
    console.log('out end', data.toString())
});

if(arangoDb.stdin.writable) {
    arangoDb.stdin.write('arangod.exe\n', 'UTF8', function() {
        console.log('write arangod.exe');
    });
}

但是在这里,程序再次成功启动,但是在stdout上我只收到cmd.exe输出,而从'arangod.exe'中什么也没收到(记住stdout.onData我先注销'out data'):

out data Microsoft Windows [Version 10.0.17134.165]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\arangodb\usr\bin>arangod.exe

我还尝试使用execexecFile及其...Sync-variant,带有分离的子进程windowsHide true|false来执行程序,但不幸的是,我也一无所获程序中的任何流(输入,输出,错误)。

您知道该问题的解决方案吗?

PS: 当前,我非常不好地检查数据库是否正确启动:在尝试连接数据库的地方使用自调用超时。但是我认为这与最佳做法相差甚远,而且我无法真正处理错误。

PPS: 通常'arangod.exe'输出如下内容,并且不会打开其他窗口:

2018-07-21T18:49:29Z [8352] INFO {authentication} Jwt secret not specified, generating...
2018-07-21T18:49:29Z [8352] INFO ArangoDB 3.3.12 [win64] 64bit, using build tags/v3.3.12-0-g225095d762, VPack 0.1.30, RocksDB 5.6.0, ICU 58.1, V8 5.7.492.77, OpenSSL 1.0.2a 19 Mar 2015
2018-07-21T18:49:29Z [8352] INFO using storage engine mmfiles
2018-07-21T18:49:29Z [8352] INFO {cluster} Starting up with role SINGLE
2018-07-21T18:49:29Z [8352] INFO {authentication} Authentication is turned on (system only)
2018-07-21T18:49:29Z [8352] INFO running WAL recovery (1 logfiles)
2018-07-21T18:49:29Z [8352] INFO replaying WAL logfile 'C:\arangodb\var/lib/arangodb3\journals\logfile-2330.db' (1 of 1)
2018-07-21T18:49:29Z [8352] INFO WAL recovery finished successfully
2018-07-21T18:49:29Z [8352] INFO using endpoint 'http+tcp://127.0.0.1:8529' for non-encrypted requests
2018-07-21T18:49:30Z [8352] INFO ArangoDB (version 3.3.12 [win64]) is ready for business. Have fun!

0 个答案:

没有答案