如何获得便携式Electron应用程序的原始路径?

时间:2017-09-19 18:49:11

标签: electron portable-applications

我在Windows上有一个便携式电子应用程序(包含:电子生成器+ asar,便携式构建)。我尝试获取应用程序路径,但它返回user \ temp文件夹中的路径而不是实际的“.exe”文件

有没有办法获取原始的app.exe路径?

我尝试了以下内容:

  • app.getAppPath()
  • __目录名称
  • require.main.filename
  • 应用根路径
  • 和一些节点模块

我从测试中得到的路径:

  

C:\用户\ XXX \应用程序数据\本地\ TEMP \ xxxxxx.tmp \应用

实际的.exe路径(应用程序从哪里启动,以及我需要的东西):

  

C:\用户\ XXX \文件\测试\ DIST

我刚刚开始使用Electron。

7 个答案:

答案 0 :(得分:5)

从主要过程:

// If not already defined...
const { app } = require ('electron');
const path = require ('path');

let execPath;

execPath = path.dirname (app.getPath ('exe'));
// or
execPath = path.dirname (process.execPath);

从渲染器进程:

// If not already defined...
const { remote } = require ('electron');
const path = require ('path');

let execPath;

execPath = path.dirname (remote.app.getPath ('exe'));
// or
execPath = path.dirname (remote.process.execPath);

答案 1 :(得分:5)

我找到了一个解决方案: 使用环境变量(由Electron-Builder创建)

process.env.PORTABLE_EXECUTABLE_DIR

显示App.exe的真实路径。 作品仅包含Electron-Builder

答案 2 :(得分:1)

以上答案均不适用于Windows10。

process.env.PORTABLE_EXECUTABLE_DIR返回Temp目录路径。

我使用它来工作:

process.env.INIT_CWD

答案 3 :(得分:1)

对此我遇到了很多麻烦,最终能够通过将__dirname替换为'。'来解决此问题,请参见下面的工作示例:

const path = require('path')
const myAppPath = path.resolve('.', 'myapp.exe');

答案 4 :(得分:0)

process.env.PORTABLE_EXECUTABLE_FILE

将为您提供文件的完整路径。

答案 5 :(得分:0)

由于上述方法均无效,并且我不想为此使用外部库,因此我尝试了以下操作:

        if (!fs.existsSync("../images")) {
            fs.mkdirSync("./../images");            
        }
        return path.resolve("./../images/") + "/";

您可以使用任何应存在于顶层或其他任何位置的目录。就我而言,我知道目录中必须有一个更高的目录,称为“ images”。

对于我来说,此解决方案适用于DEV构建和生产(打包)。

使用这种方法是否有缺点?

答案 6 :(得分:0)

似乎PORTABLE_EXECUTABLE_FILE只能在某些Electron-Builder配置下工作;特别是,它在部署为可移植目录的应用程序中将不起作用。

在这种情况下,以下内容将为您提供应用程序的根路径:

const path = require('path')
import { app } from 'electron'

let rootDir = app.getAppPath()
let last = path.basename(rootDir)
if (last == 'app.asar') {
    rootDir = Path.dirname(app.getPath('exe'))
}