是否可以运行 cmd.exe 并使用 Electron.js 执行某些命令?
如果是的话我该怎么做?
在您的
main.js
文件中,您可以放置以下代码:
//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();
}
现在,您可以通过调用以下命令来执行任意命令(示例来自Windows命令提示符,但功能是通用的):
run_script("dir", ["/A /B /C"], null);
你的命令的参数实际上是一个数组
["/A /B /C"]
,最后一个参数是要执行的回调,如果不需要特殊的回调函数,你可以提供null
作为参数。
可以通过使用节点的 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);
});
npm 中也有许多针对此主题的包。
这有效
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)
}
)
}