首页 > 解决方案 > 从 JS 函数内部运行命令行(使用 Electron.js)

问题描述

我正在使用 Electron 构建一个销售点应用程序。在程序中的某些时候,我需要打开收银机。这可以通过ECHO>COM3在我的 Windows 计算机上输入命令提示符或打开包含该命令的 .bat 文件来完成。我以前使用 PHP 打开有效的文件,但我不想使用 PHP,因为它必须在我想使用该程序的每台计算机上安装和配置。

如果我制作这样的javascript函数

function openCashDrawer(){

}

我可以在函数中放入什么来执行我的一行代码?听起来很简单,我已经在网上搜索并尝试了很多东西,但没有任何效果。我认为有一种方法可以通过 node.js 完成,但我不知道它是如何工作的。

我确实nodeIntegration: true在我的 main.js 文件中设置了

这是我的 package.json 文件

{
  "name": "elec",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "start": "electron main.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^15.3.0"
  }
}

标签: node.jscommand-lineelectron

解决方案


这可以通过在 Node.js 中执行 shell 命令来实现,为此exec()可以从child_process模块中使用该功能。

输入child_process

为了将 Node 模块与 Electron 一起使用,首先需要启用节点集成,以及远程模块,可以这样设置webPreferences

webPreferences: {
    nodeIntegration: true,
    contextIsolation: false,
    enableRemoteModule: true
}

使用以下代码,您可以执行 shell 命令并在需要时处理来自标准输出的响应。

const { exec } = require("child_process");

function openCashDrawer() {
    exec("ECHO>COM3", (error, stdout, stderr) => {
    if (error) {
        console.log(`[ERROR] openCashDrawer: ${error.message}`);
        return;
    }
    
    if (stderr) {
        console.log(`[STDERROR] openCashDrawer: ${stderr}`);
        return;
    }

    console.log(`openCashDrawer: ${stdout}`); // Output response from the terminal
    });
}

处理权限不足

通过 Node.js 执行 shell 命令需要提升才能以正确的权限执行。在 Windows 上,这是为了能够以管理员身份执行,解决方法是调整 Node 应用程序,使其具有相应的权限,以便它可以执行 shell 命令。


推荐阅读