【问题标题】:How to run executable file from packaged Electron app如何从打包的 Electron 应用程序运行可执行文件
【发布时间】:2020-02-22 14:25:47
【问题描述】:

我正在使用 Electron 构建一个应用程序,其中有一些可执行文件在使用 Javascript 中的子进程从终端运行 npm start 时运行良好。然而,当用电子生成器打包它时,我的应用程序找不到可执行文件。我已经阅读了许多相关帖子,但没有人回答我的问题。

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 中)运行,没有问题。

任何帮助将不胜感激。

【问题讨论】:

    标签: node.js electron executable child-process electron-builder


    【解决方案1】:

    假设您将应用打包为 asar:

    您的所有路径都相对于您的文件。因此,当此文件更改其位置时,路径将不再起作用。

    使用 asar 更改打包

    C:\myApp\scripts\main.js

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

    因此无法从那里找到您的文件。

    有几个选项。例如:

    • 将所有可执行文件和文本文件放入 asar。 好处:您可以将它们与您的应用程序一起分发。缺点:应用程序可能 变大,这不适用于所有可执行文件,因为有些可能 需要自己依赖。

    • 以某种方式确定当前机器上的绝对路径(我没有 macOS 的想法。在 Windows 上,我读取注册表并提取路径 从那里需要。)

    • 如果打包或不打包,则提供不同的路径,例如 electron-is-running-in-asarpackage.

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 2018-08-06
      • 2017-02-19
      • 2017-11-17
      • 2018-07-03
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多