Claude Desktop “Host Claude Code binary not available” 修复方案

问题描述

Claude Desktop(MSIX Windows Store 版本)启动后,对话时提示组件异常:

Host Claude Code binary not available. Check that the download completed.

根因分析

  1. Claude Desktop 内部依赖一个独立的 Claude Code 二进制文件 (claude.exe) 来执行编程任务
  2. 该二进制文件由 Claude Desktop 自动从 Anthropic 服务器下载到用户数据目录
  3. 由于网络限制(DNS 解析失败 ERR_NAME_NOT_RESOLVED),自动下载失败
  4. 二进制文件缺失导致 Claude Desktop 无法启动 Claude Code 组件

解决方案

前提条件

已通过 npm 全局安装 Claude Code CLI:

npm install -g @anthropic-ai/claude-code

二进制文件位于:

C:\Users\zhang\AppData\Roaming\npm\node_modules\@anthropic-ai\claude-code\bin\claude.exe

修复步骤

1. 确定目标路径

Claude Desktop MSIX 版(3p 部署模式)的用户数据目录为:

C:\Users\zhang\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Local\Claude-3p

Claude Code 管理器 (hPi 类) 的存储路径构造方式为:

this.storageDir = path.join(app.getPath("userData"), "claude-code");

因此二进制文件应位于:

{userData}/claude-code/{version}/claude.exe

即:

{package}\LocalCache\Local\Claude-3p\claude-code\{version}\claude.exe

所需版本号(从 app.asar 中的 manifest 获取):2.1.138

2. 创建目录并复制文件
mkdir -p "C:\Users\zhang\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Local\Claude-3p\claude-code\2.1.138"
cp "C:\Users\zhang\AppData\Roaming\npm\node_modules\@anthropic-ai\claude-code\bin\claude.exe" "C:\Users\zhang\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Local\Claude-3p\claude-code\2.1.138\claude.exe"
3. 创建 .verified 标记文件
touch "上述目录/.verified"

.verified 文件是二进制下载完整的标记。binaryExistsForTarget() 方法会同时检查 claude.exe.verified 两个文件的存在性。

4. 重启 Claude Desktop

完全退出 Claude Desktop(包括系统托盘图标),然后重新打开。

验证

重启后发起对话,Claude Code 组件应正常加载,不再报错。

技术细节

关键代码路径(来自 app.asar 主进程 .vite/build/index.js):

  1. Claude Code 管理器初始化hPi 类构造函数):

    this.storageDir = path.join(app.getPath("userData"), "claude-code");
    this.requiredVersion = "2.1.138"; // 从内嵌 manifest 读取
    
  2. 二进制文件就绪检查getBinaryPathIfReady):

    async getBinaryPathIfReady() {
      const A = await this.getLocalBinaryPath();  // 环境变量覆盖
      if(A) return A;
      const t = this.getHostTarget();
      // 检查 {storageDir}/{version}/claude.exe + .verified
      if(await this.binaryExistsForTarget(t, this.requiredVersion))
        return this.getBinaryPathForTarget(t, this.requiredVersion);
      // 回退:检查其他已安装版本
      return await this.getAnyInstalledBinaryPathForTarget(t);
    }
    
  3. 二进制文件存在性检查binaryExistsForTarget):

    async binaryExistsForTarget(A, t) {
      const i = this.getBinaryPathForTarget(A, t);  // claude.exe 路径
      const r = path.join(A.storageDir, t, ".verified");  // .verified 路径
      try {
        await fs.promises.access(i, X_OK);
        await fs.promises.access(r);
      } catch { return false; }
      return this.checkCachedBinaryHeader(A, t, i);  // Windows 始终返回 true
    }
    
  4. HostLoop 调用会检查 hostBinaryPath

    if (!s) throw new Error("Host Claude Code binary not available. Check that the download completed.");
    

注意事项

  • Claude Desktop 更新后,内部 requiredVersion 可能变化,届时需要重新执行复制操作
  • 如果不想手动维护,也可将 claude.exe 所在目录加入系统 PATH,确保 where claude 能找到
  • 不要在多处冗余复制二进制文件(单个 234MB),只需放在 userData/claude-code/{version}/ 下即可
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐