当前位置: 首页 > 知识库问答 >
问题:

在vscode扩展中执行electron应用程序

戚同
2023-03-14

我正在处理一个vscode扩展,它需要执行一个外部程序来执行不同的任务。如果外部程序没有参数:UI pop。使用cmd行参数:cmd行模式。我已经使用electron构建了这个应用程序,它在调试和在cmd行上使用electron启动时运行良好。这是一个包裹。exe在Windows上运行,在命令行或直接双击命令行中也同样有效。

当我试图用child_进程从我的vscode扩展执行它时,事情变得糟糕了。执行文件。我只是放置了exe路径,而进程保持在任务监视器中(没有UI)。我放置了一些cmd行参数:node reply:bad选项。我试着在一个工具内运行它。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");
      });

注意:例如,如果我使用exec启动它,使用C#中的Visual Studio生成的普通可执行文件的代码就可以很好地工作。我们只是想将electron与JS结合使用,让团队感觉宾至如归。

共有3个答案

姜楷
2023-03-14

尝试vscode。环境。openExternal(vscode.Uri.file(filePath))

景星华
2023-03-14

有两件事可以帮助你:

>

  • 当您将命令行选项传递给打包的电子应用程序时,您需要在任何其他选项之前追加--。这向电子发出信号,这些命令行选项实际上是为您的应用程序而设计的,而不是电子/节点可执行文件

    exampleApp。exe--yourOption1

    其次,您正在尝试使用儿童rocess.exec文件()生成一个同步进程。儿童rocess.exec文件()也有一些已知的安全问题,这就是为什么您应该避免它。相反,对于启用的进程间通信,可以使用异步rocess.spawn()甚至是rocess.fork()。这是一篇优秀的文章,它更详细地介绍了儿童过程的不同方法

  • 幸弘光
    2023-03-14

    我遇到了同样的问题。我搜索了很长时间的解决方案,最后我找到了这个页面,它表明这是vscode进程的问题environment.so你应该用这种模式创建新的进程:

    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});
    

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

    "version":"your version"
    "options": {
        "env":{//add this element
        }
    },
    ...
    ...
    

    希望它能起作用!

     类似资料:
    • 我正在做一个项目,该项目将有许多JavaFX应用程序,这些应用程序具有相似但又足够不同的功能,因此我创建了一个抽象基类来扩展Application以处理常见的功能并指示它们需要做什么,还创建了一系列具体的类来扩展这些功能。然而,当我试图跑的时候,我得到 应用程序构造函数java.lang.Reflect.InvocationTargetException位于java.base/jdk.intern

    • Rexx(重构的扩展执行程序)旨在成为脚本语言。 它的目标是使脚本尽可能简单,快速,可靠和无错误。 许多编程语言旨在与旧语言兼容,并针对特定受众或平台编写。

    • Node.js以单线程模式运行,但它使用事件驱动的范例来处理并发。 它还有助于创建子进程,以便在基于多核CPU的系统上利用并行处理。 子进程总是有三个流child.stdin , child.stdout和child.stderr ,它们可以与父进程的stdio流共享。 Node提供了child_process模块,该模块具有以下三种创建子进程的主要方法。 exec - child_process

    • /library/frameworks/mono.framework/external/xbuild/xamarin/android/xamarin.android.common.targets:错误:执行任务生成器时出错JavaStubs:应用程序不能同时具有[Application]属性和[assembly:Application]属性的类型。(MyApp.Droid) 如果I applica

    • 目的 使用部署配置来部署多个 Pod,并以此扩展缩放应用。 环境 openshift v3.11.16/kubernetes v1.11.0 步骤 创建工程1. CLI 登录到 OCP $ oc login https://master.example.com:8443 -u admin -p admin2. 创建工程 $ oc new-project lab08 创建一个新应用,测试缩放1. 创

    • 问题内容: 我有一个用Swift编写的应用程序(简称MyApp),其目标如下: :主要目标 :一个目标,用于为应用及其扩展程序(主要是API后端和数据库处理)之间共享的代码构建框架 :使用框架的Today View小部件(或现在称为的小部件)。 该框架链接到使用它的每个目标,即和。输入Cocoapods:我以前具有以下Podfile结构: 这里的目的是仅将框架公开给其他部分,而不是将其所有pod