1. ホーム
  2. node.js

[解決済み] Node Webkitで外部exeを実行するには?

2022-02-12 01:16:36

質問

私は自分のウェブアプリにNode Webkitを使っていますが、Node Webkitで作業するのは本当に初心者です。私は自分のアプリケーションでexeを実行したいのですが、「child_process」を使用して簡単なメモ帳を開くことさえできません。私はウェブサイトでいくつかの例を見てきましたが、それでも私はnotepad.exeを実行することが困難であることを発見した。

var execFile = require 
('child_process').execFile, child;

child = execFile('C:\Windows\notepad.exe',
function(error,stdout,stderr) { 
if (error) {
            console.log(error.stack); 
            console.log('Error code: '+ error.code); 
            console.log('Signal received: '+ 
            error.signal);
           } 
console.log('Child Process stdout: '+ stdout);
console.log('Child Process stderr: '+ stderr);
 }); 
child.on('exit', function (code) { 
console.log('Child process exited '+
'with exit code '+ code);
});

また、meadco-neptuneプラグインを使ってexeを実行しようとし、プラグインを追加するためにpackage.jsonファイルにコードを書きましたが、プラグインがロードできないと表示されます。私のpackage.jsonファイルは以下のようなものです。

 {
   "name": "sample",
   "version": "1.0.0",
   "description": "",
   "main": "index.html",
   "window": {
   "toolbar": false,
   "frame": false,
   "resizable": false,
   "show": true,

   "title": " example"
             },
   "webkit": {
   "plugin": true
             },
    "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
             },
    "author": "xyz",
    "license": "ISC"
 }

解決方法は?

node.jsでは、標準モジュールを使って外部プログラムを起動する方法として、以下の2つがあります。 child_process : execspawn .

を使用する場合 exec の場合、外部プログラムの終了時に stdout と stderror の情報を取得します。データはその時だけnode.jsに返されます。Mi Ke Buがコメントで正しく指摘している通りです。

しかし、外部プログラムから対話的にデータを受け取りたい場合(実際には notepad.exe を起動することはないでしょう)、別の方法を使用する必要があります - 。 spawn .

例を考えてみましょう。

var spawn = require('child_process').spawn,
    child    = spawn('C:\\windows\\notepad.exe', ["C:/Windows/System32/Drivers/etc/hosts"]);

child.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

child.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

child.on('close', function (code) {
  console.log('child process exited with code ' + code);
});

また、パス名にはバックスラッシュを2つ使用する必要があります。 C:\\Windows\\notepad.exe そうでなければ、パスは次のように評価されます。
C:windows notepad.exe (改行あり)これはもちろん存在しないものです。

あるいは、例のコマンドライン引数のように、フォワードスラッシュを使用することもできます。