编码代理与终端 · 收录于 2026-08-31 · 适用 1 工具 ✓ 实测验证

WSL 里运行 notepad.exe / cmd.exe 报 command not found(interop 失效)

已验证 2026-08-31WSL 里 notepad.exe 报 command not found——/etc/wsl.conf 开 [interop] enabled=true + appendWindowsPath=true,重启发行版生效。

快速修复

# WSL 内:打开两个开关(没有该段就整段追加)
echo -e "[interop]\nenabled=true\nappendWindowsPath=true" >> /etc/wsl.conf
# Windows 侧:重启发行版生效
wsl --terminate <发行版名>
wsl -d <发行版名>

你会遇到什么

在 WSL 里 notepad.exe / cmd.exe / explorer.exe 全部报 command not found,which cmd.exe 也找不到;Windows 侧的程序一个都调不动。

WSL 的 interop(Windows/Linux 互操作)被关掉了——多半是 /etc/wsl.conf 里写了 [interop] enabled=false 或 appendWindowsPath=false(照着某些「纯净化/安全加固」教程抄的)。

本文路径:快速修复(30 秒一段命令)→ 一步步排查(可跳读)→ 原理与变体(症状/原因/证据)。赶时间直接跳到「快速修复」。

为什么会这样

interop 是 WSL 的互操作机制(默认开启):把 Windows 可执行文件通过 binfmt 注册进 Linux,让你在 WSL 里直接运行 .exe,并把 Windows PATH 追加进 Linux PATH。

/etc/wsl.conf 的 [interop] 段两个开关:enabled=false 直接关掉运行 Windows 进程的能力(binfmt 注册被移除);appendWindowsPath=false 不再把 Windows PATH 追加进来(which cmd.exe 找不到)。

enabled 管的是「能不能执行」:WSL 启动时根据该开关注册/不注册 binfmt 处理器,关掉后任何 .exe 都是 command not found。

appendWindowsPath 管的是「找不找得到」:WSL 默认把 Windows 的 PATH 追加到 Linux PATH 末尾,关掉后 /mnt/c/Windows/system32/ 不在 PATH 里,就算 interop 开着也直接输路径才能运行。

两个开关独立,症状不同:enabled=false = 直接运行报 command not found;appendWindowsPath=false = which 找不到但 /mnt/c/.../cmd.exe 全路径能跑。确定性推论:先 cat /etc/wsl.conf 看 [interop] 段,再 which cmd.exe 分流——两个都查过再动手。

一步步来

1. 看 wsl.conf 有没有 [interop] 段 — 必做

cat /etc/wsl.conf

2. 按症状分流 — 按诊断结果

  • 有 enabled=false → 改成 enabled=true;
  • 有 appendWindowsPath=false → 改成 appendWindowsPath=true;
  • 两行都有 → 全改回来。

3. 重启发行版 — 必做

# Windows 侧
wsl --terminate <发行版名>
wsl -d <发行版名>

4. 验证 — 必做

which cmd.exe                # 能找到 = PATH 已追加
cmd.exe /c echo interop-ok   # 能执行 = binfmt 注册恢复

怎么确认修好了

which cmd.exe 命中 /mnt/c/Windows/system32/cmd.exe;cmd.exe /c echo ok 正常执行(控制台中文乱码是 UTF-16 编码显示问题,不影响执行成功)。

其它环境的表现

开关症状
enabled=false直接运行 .exe 报 command not found(binfmt 没注册)
appendWindowsPath=falsewhich 找不到,但全路径 /mnt/c/Windows/system32/cmd.exe 能跑
两个都关两种症状叠加

症状

$ notepad.exe
-bash: notepad.exe: command not found
$ which cmd.exe
(无输出)

特征:WSL 里 Windows 程序集体消失;/etc/wsl.conf 有 [interop] 段且值为 false;改完没重启发行版也会「看起来没生效」。

原因

interop 默认开启,靠启动时注册 binfmt(enabled)与追加 Windows PATH(appendWindowsPath)实现。wsl.conf 把两个开关设为 false 后,Windows 进程不可执行且 PATH 里找不到。改 wsl.conf 必须重启发行版生效。

解法

  1. cat /etc/wsl.conf 找 [interop] 段;
  2. enabled=true + appendWindowsPath=true(没有该段就整段追加);
  3. Windows 侧 wsl --terminate <发行版名> 重启;
  4. which cmd.exe + 运行验证。
验证证据
  • 机制核对:微软官方文档(learn.microsoft.com/windows/wsl/wsl-config 的 [interop] 段);
  • 本机对照(2026-08-31):定制预构建版未配置 [interop] 段(默认全开)——which cmd.exe 命中、cmd.exe /c echo 可执行;未做故障复现(避免影响工作环境);
  • 实测复现日志(2026-08-31)

相关 canonical

按「前置 → 同根 / 同域 / 相关」读:

适用工具 (1)

本问题方案已挂到下列工具的方案页——从工具页也能回到这里,双向可达。

wsl · 外部工具

来源与证据

收录 验证 ✓ 实测验证适用 1 工具
方案含本地实测或来源可复核的解法;未实测项已在文中如实标注。

← 编码代理与终端 问题域 | 问题货架 | 遇到其它问题?去 问题空间 提交求助卡