Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Windows: 企业 EDR(奇安信天擎)拦截 MoveFileExW 导致启动写 index.html 报 EXDEV,CLI 完全无法启动

Đang mở Phù hợp với người mới
#4,381 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
70/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
node.js, typescript
Lĩnh vực
cli

Hướng nghiên cứu

Tìm trong mã nguồn CLI việc ghi nguyên tử của index.html bằng renameSync/temp file. Chèn try/catch fallback sang copyFileSync khi EXDEV/EPERM như được gợi ý. Xác minh bằng cách chạy khởi động máy chủ web tích hợp hoặc một unit test cho helper ghi file.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

问题描述

在企业 EDR 环境(奇安信天擎)下,CLI 启动内置 web 服务时用"写临时文件 + 原子改名"生成 index.html,rename 被安全软件过滤驱动拦截并返回 EXDEV,CLI 直接失败退出,无法使用。

Failed to start server: EXDEV: cross-device link not permitted, rename
'C:\Users\Administrator\AppData\Local\kimi-code\web\2.3.1\win32-x64\<hash>\dist-web\index.html.<pid>.<ts>.tmp'
-> '...\dist-web\index.html'

根因分析(已通过系统调用级实验确证)

天擎过滤驱动按目标扩展名(.html/.txt/.docx/.xlsx/.pdf/.jpg/.bat/.ps1 等)拦截特定的改名 API,与目录位置无关(C/D 盘任意目录均复现):

Win32 API rename 目标为 .html 等 rename 目标为 .js/.exe 等
MoveFileW(普通改名) 正常 正常
MoveFileExW(libuv uv_fs_rename 使用) ERROR_NOT_SAME_DEVICE (winerr 17) 正常
MoveFileWithProgressW ERROR_NOT_SAME_DEVICE 正常

关键点:

  • 该拦截不是跨设备问题(各层目录均无 reparse point,同卷内 rename),EXDEV 错误码有强误导性
  • 同一环境下普通 MoveFile 与"复制+删除"均正常,操作本身可行,仅因 libuv 选择了被拦截的 API
  • 天擎"信任区"只豁免病毒扫描,不豁免此拦截;Windows Defender 已被第三方接管
  • 该模式(tmp+rename 原子写文档类文件)在 Node/npm 生态广泛存在,影响面不限于本 CLI

复现

// Node v24.21.0,装有奇安信天擎的 Windows 机器
const fs = require('fs');
fs.writeFileSync('a.tmp', 'x');
fs.renameSync('a.tmp', 'b.html');   // 抛 EXDEV: cross-device link not permitted
fs.renameSync('a.tmp', 'b.js');     // 正常

对照(ctypes 直调 API):MoveFileExW(src, dst, 0) 和 (src, dst, MOVEFILE_REPLACE_EXISTING) 对 .html 目标均返回 winerr=17;MoveFileW 正常。

建议修复

原子写流程在 rename 失败时增加降级(对正常环境零影响):

try {
  fs.renameSync(tmp, target);
} catch (e) {
  if (['EXDEV', 'EPERM', 'EBUSY', 'EACCES'].includes(e.code)) {
    fs.copyFileSync(tmp, target);  // copy 路径不受上述规则影响,已验证
    fs.unlinkSync(tmp);
  } else {
    throw e;
  }
}

环境信息

  • OS:Windows 10 Pro x64(简体中文),C/D 盘均 NTFS,无符号链接
  • kimi-code CLI:2.3.1
  • 安全软件:奇安信天擎企业定制版(奇安信过滤驱动层拦截)
  • 临时绕过手段均无:天擎策略集中管控,本地无可用的排除项;扩展名白名单/信任区只豁免扫描层
Ngôn ngữ chính
TypeScript
Star
8k
Fork
1.3k
Merge trung bình
1 ngày 1 giờ
Pull request đã merge (30 ngày)
145

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của MoonshotAI/kimi-code

Tất cả issue của MoonshotAI/kimi-code

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.