Repository navigation
[Bug] 桌面版 Windows 右上角"VS Code"打开失败:ELECTRON_RUN_AS_NODE=1 泄漏进子进程环境,Code.exe 以 Node 模式运行并退出 1
#8958
Replies: 1 comment
你的归因成立——而且注入点不止一处,修法落点也很明确1. 我核到三个注入点(你只提到宿主那个)前两处让宿主进程在 Electron 里当纯 Node 跑( ⇒ 因此修法可以写得很具体:在启动外部应用(尤其 Electron 系)时,从传入的 2. 你那条"同环境可自证"的复现非常好
3. 建议补一句影响面
4. 一条同族线索同类"启动载体差一层"的问题在别处也出现过("显示文件位置"/"打开方式"一类)。若维护者修的是"按次传 env"这条通路,那几处可能一并受益——建议在报告里点明"这是启动器级而非某个入口级的问题"。 5. 版本提醒(本轮基线已变,请以此为准)
一条边界我确认的是三个注入点与启动器支持按次传 env(这足以支撑你的归因与修法落点)。"Code.exe 退出 1"的实测以你的现场为准——我没有在 Windows 上跑桌面端。 |
Uh oh!
There was an error while loading. Please reload this page.
Summary
桌面版右上角"VS Code"启动失败,而"文件资源管理器(默认)"和"Git Bash"两个按钮正常。
受影响场景:Windows 上所有基于 Electron 的 opener(VS Code / Insiders / Cursor / Windsurf / Zed)。
根因是 open-in-app 启动器把宿主后端进程环境中的
ELECTRON_RUN_AS_NODE=1原样传给了子进程,Electron 系应用因此以纯 Node 解释器模式运行。Reproduction
echo $env:ELECTRON_RUN_AS_NODE,输出1(agent 工具 shell 与后端进程同环境);注意:GUI 程序不能用
&直接调用后查$LASTEXITCODE——PowerShell 对 GUI 子系统程序不等待,$LASTEXITCODE不会更新,须用Start-Process -Wait -PassThru取.ExitCode;3. 反事实:
Remove-Item Env:ELECTRON_RUN_AS_NODE后重复步骤 2,VS Code 正常打开,$p.ExitCode为 0。GUI 路径:右上角 split button → "VS Code" → 报启动失败。"文件资源管理器(默认)"与"Git Bash"不受影响。
Current behavior
Code.exe 以 Node 模式运行,把工作区路径当作 CJS 入口模块加载,stderr(原捕获含真实用户目录,已将
C:\Users\<用户名>段脱敏为%USERPROFILE%):退出码 1,被启动器的 watch window 判定为失败。
代码定位:open-in-app 的
launchDetachedApp以scrubbedParentEnv()组装子进程 env,该函数只清除*KEY*/*SECRET*凭据类变量,未删除ELECTRON_RUN_AS_NODE;而 DSH 桌面版后端进程(本例中监听127.0.0.1:19387的那个)自身以ELECTRON_RUN_AS_NODE=1运行。Expected behavior
spawn Electron 系应用(Code.exe 等)前,从子进程环境中删除
ELECTRON_RUN_AS_NODE(建议顺带处理NODE_OPTIONS),使 VS Code 正常打开工作区。explorer(shell-open)与
git-bash.exe等非 Electron 启动器不受影响,无需改动。Environment
%LOCALAPPDATA%\Programs\Microsoft VS Code)All reactions