Как запустить исполняемый файл из упакованного приложения Electron - PullRequest
0 голосов
/ 26 октября 2019

Я создаю приложение с Electron, в котором есть некоторые исполняемые файлы, которые прекрасно работают при запуске npm start из терминала, используя дочерний процесс в Javascript. Однако, упаковывая его с помощью электронного компоновщика, мое приложение просто не может найти исполняемые файлы. Я прочитал много похожих сообщений, и ни один не ответил на мой вопрос.

Решение здесь https://github.com/sindresorhus/fix-path не решает мою проблему.

Вот мой код

function updateCourses(platform){
const fixPath = require('fix-path');

alert(process.env.PATH);

fixPath(); //This is the package but does not resolve my issue

alert(process.env.PATH);

const path=require('path');
var fs = require("fs");
var mysql=require("mysql");
// /Applications/mooc-platform.app/
alert(__dirname);
const { exec } = require('child_process');
var run="./../../Users/thanasis/Desktop/mooc-platform\ Mac/scrape_"+String(platform);
exec(run,(error, stdout, stderr) => {
if (error) {
    alert(`exec error: ${error}`);
        alert(`Something wrong happened: ${stdout}`);
        alert(`stderr: ${stderr}`);
    return;
}
    else{
        alert(platform+" courses downloaded");
        alert("Updating database");

      var con=mysql.createConnection({
        host: "localhost",
        user: "root",
        password: "simple1234",
        database: "moocs"
      });

        var v=false;
        con.connect(function(err){
        if(err) throw err;
        console.log("Connected!");


            platform=String(platform);
            var num = fs.readFileSync("../../Users/thanasis/Desktop/mooc-platform\ Mac/courses/"+platform+"/numofcourses.txt");
            num=parseInt(num,10);
            let plat=platform;
            for(i=0; i<num; i++){
                pth="../../Users/thanasis/Desktop/mooc-platform\ Mac/courses/"+platform+"/course"+i.toString()+".json";
                var content = fs.readFileSync(pth);
                var object = JSON.parse(content);
                String.prototype.setCharAt = function(index,chr) {
                    if(index > this.length-1) return str;
                    return this.substr(0,index) + chr + this.substr(index+1);
                }
                var ti=String(object.title);
                ti=ti.replace(/'/g,'i');
                sql="INSERT INTO courses (name) VALUES('"+ti+"') ON DUPLICATE KEY UPDATE hits=0";
                con.query(sql,function(err,result){
              if(err) throw err;
              console.log(result);
            });
                // con.query('DELETE FROM courses',function(err,result){
            //   if(err) throw(err);
            //   console.log(result);
            // });
            }
            v=true;
            con.end(function(err,result){
                if(err) throw err;
                if(!alert("Updated")){
                    window.location.href="load_courses.html";
                }
            });
        });
    }
});

}

Оптимально это будет запускаться из папки приложений (в Macos) без проблем.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 октября 2019

Предполагается, что вы упаковываете свое приложение как asar:

Все ваши пути указаны относительно вашего файла. Поэтому, когда этот файл меняет свое местоположение, путь больше не будет работать.

Упаковка с изменениями asar

C:\myApp\scripts\main.js

на

C:\myApp\resources\myAppName.asar\scripts\main.js

, поэтому ваши файлы не могут быть найдены оттуда.

Есть несколько вариантов. Например:

  • Помещение всех ваших исполняемых файлов и текстовых файлов в asar. Перевернутый: вы можете распространять их с вашим приложением. Недостаток: приложение может стать большим, и это не будет работать со всеми исполняемыми файлами, поскольку некоторым могут понадобиться зависимости самостоятельно.

  • Определить каким-либо образом абсолютный путь на текущей машине (у меня нетИдея macOS. В Windows я читаю реестр и извлекаю из него нужный мне путь.)

  • Укажите разные пути, если они упакованы или нет, например, с помощью пакета electron-is-running-in-asar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...