Repository navigation
|
平台:Windows 10 x64 (19045) | DSH 桌面版 44.0.0(未做任何修改的原始安装),profile desktop 实测:VS Code 1.139.1、Cursor 症状 根因 VS Code、Cursor 等都是 Electron 应用:它们在启动时读取该变量来决定「当 GUI 运行还是当 Node 运行」。读到 1 就进入 Node 模式——不创建窗口、把命令行参数当作脚本路径去找、找不到便直接退出,退出码非零。 而 open-in-app 的判定逻辑是「子进程在观察窗口内以非零码退出 = 启动失败」,于是返回 502 launch-failed,前端显示为「打开失败,请重试」。 关键点:应用发现与路径解析本身是成功的(VS Code 能被正确找到并解析出可执行文件路径),失败发生在子进程启动之后。因此错误信息与实际原因方向相反:它提示 failed to launch vscode,容易把人引向「VS Code 没装好或路径不对」,而真正的原因是环境变量继承。 最小复现 确认当前进程环境里存在 ELECTRON_RUN_AS_NODE=1(桌面版宿主即如此); 验证情况 两个不同的编辑器出现完全相同的行为,可以排除「某个编辑器自身安装有问题」这一类解释——它们唯一的共同点就是都会继承同一个父进程环境。 已成功消除该症状的方法:在宿主进程内删除该运行模式变量。 具体做法是以一个本地插件挂载到用户的 profile 配置上;该插件加载进宿主进程后,只从本进程的环境中移除 ELECTRON_RUN_AS_NODE。此后 open-in-app 启动编辑器时读到的父环境已不含它,子进程不再继承,VS Code 与 Cursor 均恢复正常。 之所以安全:Electron 只在启动那一刻读取该变量来决定运行模式,而插件加载时该决定早已完成——删除它不会改变当前进程自身的运行方式,只影响之后被启动的子进程。真正依赖该变量的适配器是自行显式声明的(例如目录中 GitHub Desktop 的条目),不依赖继承,因此不受影响。改动范围仅限本进程环境,不涉及系统设置、注册表或安装文件,并随进程重启失效。 备注 本文档由 AI 分析生成:DeepSeek v4.1F。 |
Replies: 1 comment
你的根因分析完全正确,我把两处确切位置给你1. 代码(
|
你的根因分析完全正确,我把两处确切位置给你
1. 代码(
HEAD=dsh-v0.2.1-alpha.1)⇒
:80把父进程环境整体铺开,而"清洗"只针对凭据(*KEY*/*SECRET*,:60逐字写着)⇒ 运行模式变量不在清洗范围内 ⇒ELECTRON_RUN_AS_NODE原样传给编辑器必然发生。另有一处更直接:
:584在某个分支里显式设了env: { ELECTRON_RUN_AS_NODE: '1' }⇒ 所以这条链上有两处要处理(一处置"泄漏",一处置"主动设置")。2. 你写的"只做凭据清洗"是关键——建议作为诉求的着力点
你把清洗范围的语义点出来了:凭据清洗 ≠ 环境隔离。⇒ 建议诉求写成: