You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Electron JS便携版应用的实际运行路径?

解决Electron便携版获取实际路径及压缩文件问题

核心问题原因

你当前代码使用相对路径时,Electron便携版会默认指向asar包解压后的临时目录(C:\User\User\AppData\Local\Temp\[id]\resources\app.asar),但待压缩文件实际位于可执行文件(.exe)所在的G:\myapp\dist目录,导致路径不匹配,进而出现找不到目录或zip损坏的问题。

解决方案步骤

1. 获取可执行文件所在的实际目录

使用Electron的app模块获取可执行文件的完整路径,再通过Node.js的path模块解析出其所在目录:

const { app } = require('electron');
const path = require('path');

// 提取.exe文件所在的目录(即你需要的G:\myapp\dist)
const appExeDir = path.dirname(app.getPath('exe'));

2. 修正压缩代码中的路径

将所有相对路径替换为基于appExeDir的绝对路径,同时完善异步处理避免zip损坏:

ipcMain.on("report-file", async (event, data) => {
  const { app } = require('electron');
  const path = require('path');
  const fs = require('fs');
  const archiver = require('archiver');

  const appExeDir = path.dirname(app.getPath('exe'));
  // 将zip输出到.exe所在目录
  const zipFilePath = path.join(appExeDir, "report.zip");

  const output = fs.createWriteStream(zipFilePath);
  const archive = archiver("zip", { zlib: { level: 9 } });

  archive.pipe(output);

  // 捕获压缩错误,避免进程崩溃
  archive.on('error', (err) => {
    throw err;
  });

  // 监听压缩完成事件,确保文件写入完毕
  output.on('close', () => {
    event.reply('report-file-finished', { success: true, path: zipFilePath });
  });

  if (data.saves) {
    const savesDir = path.join(appExeDir, 'game/saves');
    const cacheDir = path.join(appExeDir, 'game/cache');
    archive.directory(savesDir, false);
    archive.directory(cacheDir, false);
  }

  // 检查文件是否存在,避免因文件缺失导致压缩失败
  const logPath = path.join(appExeDir, 'log.txt');
  const tracebackPath = path.join(appExeDir, 'traceback.txt');
  
  if (fs.existsSync(logPath)) {
    archive.append(fs.createReadStream(logPath), { name: 'log.txt' });
  }
  if (fs.existsSync(tracebackPath)) {
    archive.append(fs.createReadStream(tracebackPath), { name: 'traceback.txt' });
  }

  // 异步完成压缩
  await archive.finalize();
});

3. 额外配置(若文件打包在asar内)

如果待压缩文件原本是打包在asar包中,需要在package.json的electron-builder配置里,将这些文件排除在asar外,直接放到.exe所在目录:

"build": {
  "asar": true,
  "asarUnpack": [
    "game/**/*",
    "log.txt",
    "traceback.txt"
  ]
}

内容的提问来源于stack exchange,提问作者Neyunse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:01:00