WindowsでChildeProcessを使ってもENOENTばかり出てくる際の対処法


概要

Electronでマルチプラットフォームなアプリを作ろうとした際、Windowsが行う処理のときにコマンドを叩かせる必要があったため叩かせたところ、落としたバイナリの実行はおろか、echoやcdのような単純なコマンドすらENOENTエラーになる。
検索してもかなり出づらい情報だったため、ここに記載する。

結論

spawnやexecを使う場合はcmdコマンドを叩けばいい。

問題のコード

echoでhogeと言わせたかったが動かなかった。
パスが通ってない様子だがcmdファイルを直接叩いても同じ状況が発生した。
なお、単純にこのままだと文字化けするのであとで直すこと。

const child_process = require("child_process");
let proc = child_process.spawn("echo",["hoge"]);
proc.stdout.on('data',function(data){
  console.log(data);
});

解決策

上記の状況でも何故か動くcmdコマンドに/cオプションをつけて実行すれば解決。
Linuxのcdコマンドみたいにシステムコマンドは特殊な状況でもだいたい動くみたいな感じなんだろうか…

const child_process = require("child_process");
let proc = child_process.spawn("cmd",["/c","echo","hoge"]);//ここでcmdコマンドを使うように書き換える。
proc.stdout.on('data',function(data){
  console.log(data);
});

参考