You need to enable JavaScript to run this app. ElectronJS配合Angular开发打开资源管理器文件夹路径报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

ElectronJS配合Angular开发打开资源管理器文件夹路径报错如何解决

问题原因
  1. shell.openPath() 要求传入绝对路径,如果传入相对路径,会自动基于当前进程的工作目录(CWD)拼接成完整路径。你的应用运行过程中CWD被其他逻辑(比如目录遍历、组件切换操作)修改为了/home/user/Document/A/B,此时传入相对路径A/B/C就会拼接出重复前缀的错误路径/home/user/Document/A/B/A/B/C。
  2. 你虽然引入了path模块,但没有使用它对相对路径做标准化处理,也没有固定相对路径的锚点目录,路径拼接逻辑完全依赖不稳定的当前工作目录。
修复方案

首先固定你相对路径对应的基准根目录,所有相对路径都基于这个根目录拼接成绝对路径后,再传给shell.openPath()即可。
如果你所有的相对路径都是相对于应用启动时的原始工作目录,参考修改后的代码:

组件Typescript代码

import { shell, remote } from "electron";
import * as path from 'path';

// 应用初始化阶段就保存原始工作目录,避免后续运行中CWD被篡改
const APP_BASE_ROOT = process.cwd();

onButtonClick_OpenExplorer(): void {
  const relativePath = this.note.getFolderPath();
  // 拼接得到正确的绝对路径
  const absolutePath = path.resolve(APP_BASE_ROOT, relativePath);
  console.log("Open: ", absolutePath);
  shell.openPath(absolutePath);
}

如果你的相对路径是相对于用户文档目录等系统固定目录,可以把APP_BASE_ROOT替换为对应目录的绝对路径,比如通过remote.app.getPath('documents')获取用户Documents目录的绝对路径。

注意:高版本Electron推荐将打开资源管理器的逻辑放到主进程实现,通过IPC通信触发,避免渲染进程直接调用核心模块的安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:45:04