hunter-ji / Blog

My Blog.
121 stars 38 forks source link

node spawn在windows下不生效问题记录 #43

Open hunter-ji opened 3 years ago

hunter-ji commented 3 years ago

问题描述

使用electron开发的windows桌面应用程序,在调用目标文件夹底下的exe执行文件时,开发机子上没有问题,但是其他机子使用时一直调用失败,也抓取不到日志。

spawn(path.join(remote.app.getAppPath(), "../target.exe"), [], {
  shell: true,
  detached: false,
  windowsHide: true
});

原因

路径存在空格。

也是经过各种原因排查,然后一次偶然的成功才注意到了路径问题,排查之后发现确实是这问题......

解决

spawn按照如上我的代码一定条件下可以运行,其有一个参数cwd,用来表明运行目录。spawn第一个参数必须是命令的名字,不能是路径。

所以如上代码改成这样:

spawn("target.exe", [], { // 此处直接写目标exe文件
  cwd: path.join(remote.app.getAppPath(), "../"), // 注意这里,使用了cwd参数来写运行目录
  shell: true,
  detached: false,
  windowsHide: true
});

参考文档