質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.82%

javascript exeの利用

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 944

REIA

score 25

electronでクライアントアプリを作成してその中でexeファイルを実行したいのですが、main.jsのカレントディレクトリに実行するexeが入っているにも関わらずopenできないエラーにあっています。
またデザイン面以外のjavascriptはwindowを作るmain.jsに記述するのが正しいのかも分かりません。
以下がコードになります。

const {app, Menu, BrowserWindow} = require('electron');
const {exec, execFile} = require('child-process-promise');
const kill=require('tree-kill');
const APP_NAME = new Array('./src/test.exe');
let pid =new Array();
let mainWindow;
let i =0;

function createWindow(){
    mainWindow = new BrowserWindow({width:400,height:600,'icon': __dirname+'/src/REIAcat.ico',});
    mainWindow.loadFile("./index.html");
    Menu.setApplicationMenu(null);
    if(process.env.NODE_EV=="debug")
        mainWindow.webContents.openDevTools();
    mainWindow.on("closed",function(){
        mainWindow=null;
    });
}
app.on("ready",function(){
    //window逕滓・
    createWindow();
    //socket繧「繝励Μ襍キ蜍・
    // while(i < APP_NAME.length){
        execFile('open',[APP_NAME[i]])
        .then(_=>`powershell -command "Get-WmiObject win32_process | select processid, name | Where-Object {$_.name -match \"${APP_NAME[i]}\"} | select processid >> temp.txt ; (Get-Content \"temp.txt\")[3] ; del temp.txt"`)
        .then((result)=>{
            if(result.stderr){
                throw(result.stderr);
            }
            pid.push(parseInt(result.stdout));
            logger.debug(`START AppName ${APP_NAME[i]},pid:${pid[i]}`);
            i++;

        }).catch((err)=>{
            logger.debug(`Error:${JSON.stringify(err)}`);
        });

            // exec.then=then(function(){
            //     exec(`powershell -command "Get-WmiObject win32_process | select processid, name | Where-Object {$_.name -match \"${APP_NAME[i]}\"} | select processid >> temp.txt ; (Get-Content \"temp.txt\")[3] ; del temp.txt"`,
            //     function(err,stdout,stderr){
            //         if(err){
            //             throw err;
            //         }
            //     });
            // });


    // }

});
app.on("window-all-closed",function(){
    if(process.platform !== 'darwin'){
        i=0;
        while(i <pid.length){
            kill(pid[i]);
            i++;
        }
        app.quit()
    }
});
app.on("activate",function(){
    if(mainWindow===null)
        createWindow();

});


child-promiseで起動してコマンドを使ってpidを取得しcloseWindowするときにkillするだけなのですが、
なぜかopenしてくれないという状況になっています。
わかる方がいれば教えていただけるとありがたいです。
回答よろしくお願いします。
エラー内容:

{ ChildProcessError: spawn open ENOENT `open ./src/test.exe` (exited with error code ENOENT)
 at callback (C:\Users\userName\Downloads\learn_c\socket\node_modules\child-process-promise\lib\index.js:33:27) 
at exithandler (child_process.js:306:5) 
at ChildProcess.errorhandler (child_process.js:318:5) 
at ChildProcess.emit (events.js:182:13) 
at Process.ChildProcess._handle.onexit (internal/child_process.js:238:12) 
at onErrorNT (internal/child_process.js:407:16) 
at process._tickCallback (internal/process/next_tick.js:63:19)
 name: 'ChildProcessError', code: 'ENOENT', childProcess: { ChildProcess: { [Function: ChildProcess] super_: [Function] }, 
fork: [Function: fork],
 _forkChild: [Function: _forkChild],
 exec: { [Function] [Symbol(util.promisify.custom)]: [Function] },
 execFile: { [Function] [Symbol(util.promisify.custom)]: [Function] },
 spawn: [Function: spawn],
 spawnSync: [Function: spawnSync],
 execFileSync: [Function], 
execSync: [Function] }, 
stdout: '',
 stderr: '' }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • m.ts10806

    2019/01/21 13:14

    >openできないエラーにあっています。
    基本的にはエラー文は要約せずにそのままご提示ください

    キャンセル

  • REIA

    2019/01/21 13:35

    { ChildProcessError: spawn open ENOENT `open ./src/test.exe` (exited with error code ENOENT)
    at callback (C:\Users\a1814\Downloads\learn_c\socket\node_modules\child-process-promise\lib\index.js:33:27)
    at exithandler (child_process.js:306:5)
    at ChildProcess.errorhandler (child_process.js:318:5)
    at ChildProcess.emit (events.js:182:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:238:12)
    at onErrorNT (internal/child_process.js:407:16)
    at process._tickCallback (internal/process/next_tick.js:63:19)
    name: 'ChildProcessError',
    code: 'ENOENT',
    childProcess:
    { ChildProcess: { [Function: ChildProcess] super_: [Function] },
    fork: [Function: fork],
    _forkChild: [Function: _forkChild],
    exec: { [Function] [Symbol(util.promisify.custom)]: [Function] },
    execFile: { [Function] [Symbol(util.promisify.custom)]: [Function] },
    spawn: [Function: spawn],
    spawnSync: [Function: spawnSync],
    execFileSync: [Function],
    execSync: [Function] },
    stdout: '',
    stderr: '' }
    loggerが参照できないといわれたのでconsole.log(err);したところ上記のようなエラーが出ましたENOENTというエラー自体ほかの言語でも見たことがなく戸惑ってます。

    キャンセル

  • m.ts10806

    2019/01/21 13:38

    質問は編集できるので質問本文へ追記してください(エラーもコードと同じくマークダウンのcode機能を利用してください)

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.82%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る