我在Windows上有一个便携式电子应用程序(包含:电子生成器+ asar,便携式构建)。我尝试获取应用程序路径,但它返回user \ temp文件夹中的路径而不是实际的“.exe”文件
有没有办法获取原始的app.exe路径?
我尝试了以下内容:
我从测试中得到的路径:
C:\用户\ XXX \应用程序数据\本地\ TEMP \ xxxxxx.tmp \应用
实际的.exe路径(应用程序从哪里启动,以及我需要的东西):
C:\用户\ XXX \文件\测试\ DIST
我刚刚开始使用Electron。
答案 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'))
}