hadlog
hadlog

Reputation: 125

Run cmd.exe and make some command with Electron.js

Is it possible to run cmd.exe and execute some command with Electron.js?

If yes then how can I do this?

Upvotes: 10

Views: 29497

Answers (3)

AllanRibas
AllanRibas

Reputation: 1174

This works

import path from 'path'
import { fileURLToPath } from 'url'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
import { exec } from 'child_process'

const someFolder = path.join(__dirname, "/")

function runCmd(){
  exec(`cd ${someFolder} & dir`, 
    (err, data, stderr) =>{
        console.log('runCmd: err', err)  
        console.log('runCmd: data', data)  
        console.log('runCmd: stderr', stderr)                   
    }
  )
}

Upvotes: 0

FarhadMohseni
FarhadMohseni

Reputation: 424

It is possible by using node's child_process :

const exec = require('child_process').exec;

function execute(command, callback) {
    exec(command, (error, stdout, stderr) => { 
        callback(stdout); 
    });
};

// call the function
execute('ping -c 4 0.0.0.0', (output) => {
    console.log(output);
});

and there are many packages in npm for this topic as well.

Upvotes: 8

Bud Damyanov
Bud Damyanov

Reputation: 31899

In your main.js file, you can put the following code:

//Uses node.js process manager
const electron = require('electron');
const child_process = require('child_process');
const dialog = electron.dialog;

// This function will output the lines from the script 
// and will return the full combined output
// as well as exit code when it's done (using the callback).
function run_script(command, args, callback) {
    var child = child_process.spawn(command, args, {
        encoding: 'utf8',
        shell: true
    });
    // You can also use a variable to save the output for when the script closes later
    child.on('error', (error) => {
        dialog.showMessageBox({
            title: 'Title',
            type: 'warning',
            message: 'Error occured.\r\n' + error
        });
    });

    child.stdout.setEncoding('utf8');
    child.stdout.on('data', (data) => {
        //Here is the output
        data=data.toString();   
        console.log(data);      
    });

    child.stderr.setEncoding('utf8');
    child.stderr.on('data', (data) => {
        // Return some data to the renderer process with the mainprocess-response ID
        mainWindow.webContents.send('mainprocess-response', data);
        //Here is the output from the command
        console.log(data);  
    });

    child.on('close', (code) => {
        //Here you can get the exit code of the script  
        switch (code) {
            case 0:
                dialog.showMessageBox({
                    title: 'Title',
                    type: 'info',
                    message: 'End process.\r\n'
                });
                break;
        }

    });
    if (typeof callback === 'function')
        callback();
}

Now, you can execute arbitary command (the example is from windows command prompt, but the funtion is universal) by calling:

  run_script("dir", ["/A /B /C"], null);

The parameters of your command are in fact an array ["/A /B /C"], and the last parameter is callback to be executed, you can provide null as parameter, if special callback function is not needed.

Upvotes: 10

Related Questions