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

slmsl1lt  于 2023-10-14  发布在  Electron
关注(0)|答案(7)|浏览(279)

我有一个便携式电子应用程序(挤满了:electron-builder + asar,portable build)。我尝试获取应用程序路径,但它返回的是user\temp文件夹中的路径,而不是实际的“.exe”文件
有没有办法获取app.exe的原始路径?
我尝试了以下方法:

  • getAppPath()
  • __dirname
  • require.main.filename
  • app-root-path
  • 和一些节点模块

我从测试中得到的路径:
C:\Users\xxx\AppData\Local\Temp\xxxxxx.tmp\app
实际的.exe路径(应用程序从哪里启动,我需要什么):
C:\Users\XXX\Documents\test\dist
我刚从电子开始。

6rvt4ljy

6rvt4ljy1#

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

process.env.PORTABLE_EXECUTABLE_DIR

显示App.exe的真实的路径。工程只与电子组装

gk7wooem

gk7wooem2#

从主要流程来看:

// 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);
thigvfpy

thigvfpy3#

我在这方面遇到了很多麻烦,最后通过将__dirname替换为'.'来解决这个问题,请参阅下面的工作示例:

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

j8ag8udp4#

似乎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'))
}
8i9zcol2

8i9zcol25#

以上的答案都不适用于我的Windows 10。
process.env.PORTABLE_EXECUTABLE_DIR返回Temp目录路径。
我让它工作使用:

process.env.INIT_CWD
whlutmcx

whlutmcx6#

process.env.PORTABLE_EXECUTABLE_FILE

将给予文件的完整路径。

ltskdhd1

ltskdhd17#

由于上面的方法都不起作用,我不想为此使用外部库,我尝试了以下方法:

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

您可以使用任何应该存在于顶层或其他任何位置的目录。在我的例子中,我知道在目录的更高一级,必须有一个名为“images”的目录。
这个解决方案在我的开发构建和生产(打包)的情况下有效。
使用这种方法时有什么缺点吗?

相关问题