Codex的windows沙箱机制下找不到WinGet安装的工具

nullblade 2026-08-23 00:57 1

Codex在Windows的Elevated Sandbox下,并不是直接用当前登录用户执行命令。

它会创建独立的本地普通用户:


CodexSandboxOffline
CodexSandboxOnline

然后让真正的命令以这些沙箱用户身份运行,并配合Restricted Token、ACL和网络规则做隔离。

所以:你安装软件的用户≠Codex实际执行命令的用户


这会带来两个问题。


1.User Scope工具对Codex不可靠


WinGet默认把工具安装到:


C:\Users\你的用户名\AppData\Local\...

这是当前用户自己的目录。

即使PATH里能找到uv.exeffmpeg.exe,Codex沙箱用户也可能因为ACL没有读取/执行权限而无法启动。

所以我建议把WinGet改成强制Machine Scope:


{
"$schema": "https://aka.ms/winget-settings.schema.json",
"installBehavior": {
"requirements": {
"scope": "machine"
}
}
}

这样工具会尽量安装到系统级位置,例如:


C:\Program Files\...

更适合Codex这种跨用户沙箱调用。


2.WinGet的Portable包还有一个ACL坑


ffmpeguv这类Portable/ZIP包,全局安装后通常位于:


C:\Program Files\WinGet\Packages

命令入口则在:


C:\Program Files\WinGet\Links

但WinGet存在一个已知问题:



Machine Scope安装的部分Portable包,没有正确给普通Users组继承读取和执行权限。



于是会出现:

安装工具的用户:能运行

CodexSandboxOffline:属于另一个普通用户,没有 RX 权限,Access Denied/ResourceUnavailable


我的ffmpeguv都遇到了这个问题。


最终解决办法


用管理员 PowerShell 执行:


icacls "C:\Program Files\WinGet\Packages" /grant '*S-1-5-32-545:(OI)(CI)RX' /T /C

其中:


S-1-5-32-545 = BUILTIN\Users
RX = Read + Execute

也就是说给所有普通本地用户增加读取和执行权限,但不给写入权限。

而Codex创建的Sandbox用户本身就是BUILTIN\Users成员,所以处理后就可以正常运行这些工具。

最终逻辑就是:


Codex使用独立普通用户执行命令

User Scope工具跨用户访问不可靠

改成Machine Scope

WinGet Portable又存在ACL继承问题

给BUILTIN\Users补RX

Codex可以正常调用ffmpeg / uv等工具

所以这个问题本质上不只是PATH,而是:


安装Scope
+
PATH
+
ACL

三者缺一不可。


省流


由于Codex的windows沙箱机制,WinGet安装推荐使用全局安装 + 给C:\Program Files\WinGet\Packages 补users权限。

最新回复 (13)
  • unsafe 08-23 00:59
    1

    之前安装那个gh cli, 然后登录完,重启codex一直说找不到gh cli,我试试这个方案是否可行

  • 吃风筝的人 08-23 01:00
    2

    我的Arch Linux下codex沙盒内找不到CUDA

    哈哈哈


    我现在面对可能涉及工作区外调用和检测需求时都会在对话中补一句 sandbox环境可能与真实环境不一致,请最终以真实环境为准。


    个人使用体会,codex最重要的两点:



    1. 让codex意识到sandbox的存在,不盲目下判断

    2. 让codex正确理解需求,避免盲目工程化复杂化

  • Waitingfor 08-23 01:03
    3

    可以在项目的Agents.md里直接指定gh cli的路径,我现在是在D盘中的

  • nullblade 楼主 08-23 01:03
    4

    对于找不到工具都可以从两方面排查:1.环境变量:系统级环境变量下能否找到该工具(注意不是自己的用户环境变量);2.ACL权限问题:普通users组对该工具的文件目录是否具备读取执行权限。

  • nullblade 楼主 08-23 01:06
    5

    是的,我也试过全局提示词缓解,告诉codex找不到工具时尝试提权执行,提权执行似乎可以使用用户的环境变量

  • undefined 08-23 01:06
    6

    这个时候貌似得祭出哈雷的那个工具了。

    直接从win store中捞到安装包,然后直接解压。。

    想放啥地方放啥地方,不走那个垃圾安装。

    规避了appx沙盒的一堆问题。。

  • nullblade 楼主 08-23 01:07
    7

    佬友说下工具名字呢,我还没用过。

  • undefined 08-23 01:09
    8

    这个这个,直接从store捞东西。



    从如何让只用过豆包的大学同学快速安装好codex?继续讨论:
    [image]
    [image]
    之前实现在仓库的 js脚本
    糊了一下锈成小工具了 点击就下
    对于 Codex Desktop 来说
    这坨史本来 Electron Win10+ 就行
    msix 就是个压缩包 解压里面就是 不需要点开安装
    安装会进UWP 的沙盒目录 也是非常猪的一环
    抠出来想放哪用放那用 本就是便携版 …
  • 吃风筝的人 08-23 01:10
    9

    其实智能批准状态下,如果codex意识到sandbox存在,是能够自主评估和提权,做出正确判断的,但是有意思的地方来了:codex天生就不知道sandbox的存在,一旦提醒它,立马情况好转。


    至少Linux的codex cli是经常有这个问题。


    win上面用codex困扰我的甚至轮不到sandbox,PowerShell就够codex大战一番了。升级了ps7,但是好多时候还在左右互搏,没有改善

  • undefined 08-23 01:12
    10

    很少win下用,我是在macos下用的,

    这坑爹货codex知道沙盒,但它还绕不过去。。

    我都是直接设置,放行一些东西的。。。


    [sandbox_workspace_write]
    writable_roots = [
    "/Users/xx/Library/Caches/go-build",
    "/Users/xx/Library/pnpm",
    "/Users/xx/go/pkg/mod",
    ]
    network_access = true

    不放行这货就往/tmp中拉屎,并且反复不断的拉屎。。

    折磨硬盘属于是

  • nullblade 楼主 08-23 01:17
    11

    还有经典卡顿,真不知道OPENAI在干嘛,windows体验依托史 ^-^

  • 菲比啾比 08-23 09:52
    12

    其实不光openai,其他的agent在windows体验都不行,妥妥二等公民待遇,甚至deepseek-harness最令人称奇的Minimal模式windows都没有。。。而且很多agent管理工具在这个平台也是bug频出。微软还不反省一下,推出点好东西,用户怕是要跑光了。

  • U8仰望 08-23 10:11
    13

    之前也很苦恼,每次都要告诉它详细路径,改用 YOLO mode 之后安逸了

* 帖子来源Linux.do
返回