无法在 Windows 从 express.js 生成自定义 .exe

Unable to spawn a custom .exe from express.js on Windows

我在 windows 上使用 node.js/express.js,我有一个命令,当用户拍摄图像并从那里上传时执行 phone。上传后,我 运行 myApp.exe 执行一些 openCV 图像处理,并将更新后的图像输出到输出目录,该目录是下面命令中的参数。

我可以使用 child_process.exec 从我的 webapp 启动它,但是如果我 运行 它自己在命令行中,性能会慢 60 倍。为了提高性能,我希望使用 Spawn,但我不知道这是否是一个准确的假设,如果不是,请告诉我。

var exec = require('child_process').exec; 
var child = exec('C:\opt\package_v030_package\myApp.exe 
--user="C:\opt\package_v030_package\Phone\'+file.filename+'" 
--mv="C:\opt\package_v030_package\mv\'+req.body.detectionString+'.bmp" 
--outPath="C:\opt\package_v030_package\output" 
--outputScaled 
--outputScaledOverlaid');

  child.stdout.on('data', function(data) {
      console.log('stdout: ' + data);
  });
  child.stderr.on('data', function(data) {
      console.log('stdout: ' + data);
  });
  child.on('close', function(code) {
      console.log('closing code: ' + code);
      //res.json("success")
  });

我尝试使用 spawn 启动它,但它无法执行以下内容:"error child process exited with code 4294967295"。代码如下:

  var spawn = require('child_process').spawn;
  var cmd = spawn('cmd', ['/s',
  '/c',
  'C:\opt\package_v030_package\myApp.exe',
  '--user="C:\opt\package_v030_package\Phone\'+file.filename+'"',
  '--mv="C:\opt\package_v030_package\mv\'+req.body.detectionString+'.bmp"',
  '--outPath="C:\opt\package_v030_package\output"',
  '--outputScaled',
  '--outputScaledOverlaid'
  ]);

  cmd.stdout.on('data', (data) => {
   console.log(`stdout: ${data}`);
  });

  cmd.stderr.on('data', (data) => {
   console.log(`stderr: ${data}`);
  });

  cmd.on('close', (code) => {
    console.log(`child process exited with code ${code}`);
  });

我似乎只能从 spawn 执行 myApp.exe,因为当我添加任何参数时它都失败了。即使我硬编码我注入的变量。我的论点有问题还是我生成的 myApp.exe 不正确?

更新 1

我将命令放在 .bat 中,并能够使用 spawn 从 node.js 执行它。它不会提高性能,这让我相信性能下降是 windows 平台上 node.js 的限制。

此外,我使用 postman 进行了一些测试,以查看是否可以在不发生任何其他情况的情况下优化调用,但我没有成功。如果这种情况发生变化并且 node.js 能够更好地处理 CPU 密集子进程的性能,我将保留这个问题。

更新 2 和答案

我能够通过将我们 运行 在命令行中的命令放入 java class 并将 detectionString 作为参数来解决这个问题。然后从节点我使用 spawn 启动 .jar 文件。这导致速度显着提高并且 运行 就好像我在命令行 运行 自己设置它一样。

我能够通过将我们在命令行中 运行 的命令放入 java class 并将 detectionString 作为参数来解决此问题。然后从节点我使用 spawn 启动 .jar 文件。这导致速度显着提高并且 运行 就好像我在命令行 运行 自己设置它一样。