Win7 复活记:用 3 个补丁让 13 年前的老电脑跑通 Kimi API

本系列其他文章:我在 Win3.1 到 Win11 上跑 AI:7 个版本迭代

背景

我手上有一台 2013 年的台式机,系统 Windows 7 SP1,主要用于跑一些轻量服务。最近想在上面部署 Kimi 的免费 API,用于接入自研的 Agent 项目。

结果踩了 5 个小时的坑。这篇文章完整记录过程,希望能帮到同样在 Win7 上挣扎的人。

最终效果:

  • 本地 http://localhost:8000/v1/chat/completions → 200
  • 公网 https://api.xxx.com/v1/chat/completions → 200
  • 开机自启、无窗口、token 自动刷新
  • 零成本

第一关:Node.js 的 libuv 崩溃

现象

部署 Kimi-Free-API,npm install 装依赖时报:

arduino 复制代码
Error: Cannot find module 'fs-extra'

装好依赖后启动,又崩在:

bash 复制代码
SystemError [ERR_SYSTEM_ERROR]: A system error occurred:
uv_os_gethostname returned ENOSYS (function not implemented)
    at node_modules/formidable/src/Formidable.js:17:25

原因

formidable 包在加载时调用了 os.hostname(),底层走 Node.js 的 libuv → Windows API GetHostNameW。

Win7 的 ws2_32.dll 没有 GetHostNameW 函数 (Vista 之前没有,Win8 之后才普及)。libuv 直接抛 ENOSYS。

解法:猴子补丁

在项目根目录创建 patch.js:

js 复制代码
const os = require('os');
os.hostname = function () { return 'localhost'; };

启动时用 --require 注入:

cmd 复制代码
node --require ./patch.js dist/index.js

这样 os.hostname() 被短路,formidable 不再崩溃。

第二关:esbuild 的原生编译失败

现象

装依赖时装到 esbuild 时崩溃:

php 复制代码
Exception 0xc0000005 0x8 0x0 0x0
runtime.asmstdcall(...)

0xc0000005 是 Windows 的"访问违规"错误,通常在程序访问了未映射内存时出现。

原因

esbuild 从 0.14 开始用 Go 重写核心,Go 编译器生成的代码在新版本里依赖一些 Win8+ 的 API。

解法:跳过 scripts

cmd 复制代码
npm install --ignore-scripts

关键认知 :esbuild 只是编译工具 (把 TS 编译成 JS)。Kimi-Free-API 的 dist/ 目录已经有编译好的 JS 产物,运行时根本不需要 esbuild。

跳过 postinstall 脚本完全不影响运行。

附带问题:mime 包的 ESM 冲突

装完后启动报:

css 复制代码
Error [ERR_REQUIRE_ESM]: require() of ES Module
node_modules/mime/dist/src/index.js not supported

mime 从 v4 开始是纯 ESM 模块,而 dist/index.js 是 CommonJS 编译产物。降级到 v3.0.0:

cmd 复制代码
npm install mime@3.0.0 --ignore-scripts

第三关:cloudflared 在 Win7 上崩溃

现象

用 cloudflared 暴露本地服务,启动就崩:

ini 复制代码
Exception 0xc0000005 0x8 0x0 0x0
PC=0x0
internal/runtime/syscall/windows.asmstdcall(...)

和 esbuild 一模一样的错误。同一个根因:新版 Go 编译器生成的程序调用了 Win8+ 的 API。

解法:用 GoWin7Fixer 打补丁

golangwin7patch 是一个专门给 Go 编译的 Win 程序做兼容性补丁的工具。

下载 GoWin7Fixer.exe,双击打开,拖入 cloudflared.exe,它会自动:

  1. 扫描二进制里的 Win8+ API 调用
  2. 替换成 Win7 兼容的等价实现
  3. 保存备份 .bak

打完补丁后:

cmd 复制代码
cloudflared --version
:: cloudflared version 2026.10.0

正常了。

番外:尝试降级 Chat2API 的 Electron

既然 Kimi-Free-API 能跑,我又想试试更现代的 Chat2API(带仪表盘、多 provider 支持)。

思路

Chat2API 用 Electron 33 打包,直接在 Win7 上跑会报:

makefile 复制代码
D:\Chat2API.exe 不是有效的 Win32 应用程序。

Electron 从 23 开始就不再支持 Win7。所以思路是:把 Electron 从 33 降到 22.3.27,重新打包。

操作

修改 package.json:

diff 复制代码
- "electron": "^33.0.2",
- "electron-builder": "^25.1.8",
- "electron-vite": "^2.3.0",
- "electron-updater": "^6.3.9",
- "electron-store": "^10.0.0",
+ "electron": "22.3.27",
+ "electron-builder": "22.14.13",
+ "electron-vite": "1.0.28",
+ "electron-updater": "5.3.0",
+ "electron-store": "8.2.0",

然后:

cmd 复制代码
npm install --ignore-scripts
:: 手动补 electron 二进制
node node_modules/electron/install.js
:: 打包
npm run build:win

结果

打包成功,界面也起来了(Dashboard 完整加载)。

但所有 API 请求都返回 500:

bash 复制代码
POST /v1/chat/completions → 500 Internal Server Error

日志里没有任何堆栈,异常被内部吞掉。尝试了 4 个模型名、重启代理、看 DevTools Console,全部无效。

结论 :降级 Electron 能过编译和启动阶段,但运行时某些依赖(electron-store / electron-updater / Node 版本相关的 API)在 Electron 22 下不存在,抛错被 catch 吞了。

这种问题改不完,第 5 个 catch 之后项目就升级了。放弃,回到 Kimi-Free-API。

效果验证

本地

cmd 复制代码
curl -X POST http://localhost:8000/v1/chat/completions ^
  -H "Authorization: Bearer <your_refresh_token>" ^
  -H "Content-Type: application/json" ^
  -d "{\"model\":\"kimi-k2-0905-preview\",\"messages\":[{\"role\":\"user\",\"content\":\"hi\"}]}"

返回:

json 复制代码
{
  "choices": [{
    "message": {
      "content": "Hi there! I'm Kimi, your AI assistant..."
    }
  }]
}

公网

通过 Cloudflare Named Tunnel 暴露:

bash 复制代码
https://api.xxx.com/v1/models → 200
https://api.xxx.com/v1/chat/completions → 200

从 4G 网络的手机访问也能通。

开机自启

三样东西都丢进 shell:startup:

  1. kimi-free-api.lnk → 启动 Kimi-Free-API(无窗口)
  2. cloudflared-tunnel.vbs → 启动 Cloudflare Tunnel(无窗口)
  3. (可选)任何用到 API 的客户端

开机后全自动,屏幕干净。

总结

Win7 的老电脑跑通现代 AI API,关键是认识这三个根因:

问题 根因 解法
libuv ENOSYS Win7 缺 GetHostNameW patch.js 覆盖 os.hostname
Go 程序崩溃 新版 Go 调用 Win8+ API GoWin7Fixer 打补丁
ESM/CJS 冲突 新包默认 ESM 降级到 CJS 版本

三个补丁,让一台 2013 年的台式机,变成了跑 AI 服务的服务器。

完整部署脚本:github.com/doujiaozh/w...


免责声明:本文涉及的逆向 API 仅供个人研究学习,请勿商用或对外提供服务。Kimi 官方 API 更稳定,建议生产环境使用官方版本。

相关推荐
bbq烤鸡7 小时前
Win11 资源管理器“白条“修复报告
windows
10mAh8 小时前
【Java】ArrayList 遍历删除为什么报错?三种写法与漏删复现
java·开发语言·windows
瑶山11 小时前
Windows + WSL2 Ubuntu + VS Code配置C++开发环境
开发语言·c++·windows·vscode·wsl
在角落发呆12 小时前
一键脚本配置备份方法:从 Shell 脚本到自动备份
网络·windows
水饺编程13 小时前
第1章,[Win32 章节]:在 VS2019 里面安装 MSDN
c语言·c++·windows·visual studio
水饺编程13 小时前
第1章,[Win32 章节]:编程环境与 MSDN
c语言·c++·windows·visual studio
丨白色风车丨13 小时前
Python中JSON与字典/列表的相互转换详解
windows·python·json
瑶山14 小时前
Windows 11 一键安装命令安装 WSL2到D盘
windows·wsl
bug和崩溃我都要1 天前
QT 开发的专业截图录屏工具 - macOS版 / Windows版
windows·qt·mac·录屏·截屏