【发布时间】:2018-12-27 23:10:16
【问题描述】:
我正在开发一个 vscode 扩展,它需要执行一个外部程序来完成不同的任务。如果外部程序不带参数:UI 弹出。使用 cmd 行参数:cmd 行模式。我已经使用电子构建了这个应用程序,它在调试和在 cmd 行上使用电子启动它时运行良好。它在 Windows 上被打包成 .exe,在 cmd 行或直接双击它也同样有效。
当我尝试使用 child_process.execFile 从我的 vscode 扩展程序执行它时,事情变得很糟糕。我只是放了exe路径,进程停留在任务监视器中(无UI)。我放了一些命令行参数:节点回复:错误选项。我尝试在 tools.bat 文件中运行它,以便改为调用 bat。也不行。我尝试过 fork、spawn、exec。同样的行为。
启动代码:
const childProcess = child.execFile(pathToExec, [], { cwd: execDir, env: process.env, });
childProcess.stdout.on('data', (data) => {
console.log(data.toString());
});
childProcess.stderr.on('data', (data) => {
console.log(data.toString());
});
childProcess.on("exit", () => {
console.log("exit");
});
注意:例如,使用 C# 中的 Visual Studio 构建正常可执行文件的相同代码,如果我使用 exec 启动它,则效果很好。我们只是想将 Electron 与 JS 结合使用,让团队有宾至如归的感觉。
【问题讨论】:
-
pathToExec是否包含空格?如果您将shell: true添加到exec选项,这是否有效? -
我的电脑上没有空间(以为我无法保证客户端将使用的路径)。我已经尝试使用 shell 执行到“cmd.exe”。结果相同。奇怪的是,当我尝试使用“electron main.js”(所以没有打包的 exe)运行它时,它可以工作但它崩溃到“app.on”,告诉我应用程序未定义(const {app} = require('electron')) .这当然只发生在 vs 代码扩展中。
标签: node.js visual-studio-code electron