在 vscode 扩展中执行电子应用程序

The*_*nnn 4 node.js electron visual-studio-code

我正在开发一个 vscode 扩展,它需要执行一个外部程序来完成不同的任务。如果外部程序不带参数:UI 弹出。使用 cmd 行参数:cmd 行模式。我已经使用电子构建了这个应用程序,它在调试和在 cmd 行上使用电子启动它时运行良好。它在 Windows 上被打包为 .exe,并且在 cmd 行或直接双击它时同样有效。

当我尝试使用 child_process.execFile 从我的 vscode 扩展执行它时,事情变得很糟糕。我只是放了exe路径,进程停留在任务监视器中(没有UI)。我放了一些 cmd 行参数:节点回复:错误选项。我尝试在 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");
      });
Run Code Online (Sandbox Code Playgroud)

注意:例如,在 C# 中使用 Visual Studio 构建普通可执行文件的相同代码,如果我使用 exec 启动它,效果会很好。我们只是想在 JS 中使用电子,让团队有宾至如归的感觉。

Ice*_*Lee 6

遇到同样的问题,找了半天,终于找到这个页面,说明是vscode进程的环境问题。所以你应该用这种模式创建新进程:

var spawn_env = JSON.parse(JSON.stringify(process.env));
console.log(process.env);
delete spawn_env.ATOM_SHELL_INTERNAL_RUN_AS_NODE;
delete spawn_env.ELECTRON_RUN_AS_NODE;
var spawn = require('child_process').spawn;
spawn(cmd,[],{env:spawn_env,detached:true});
Run Code Online (Sandbox Code Playgroud)

如果不起作用,请.vscode/tasks.json在您的扩展项目中修改您的:

"version":"your version"
"options": {
    "env":{//add this element
    }
},
...
...
Run Code Online (Sandbox Code Playgroud)

希望它可以工作!