Files
ClassHelper/docs/get-started/requirements.md
T
LoveChengke b7cdc7c9ea fix(clients,client,web): 远控指令的两个修复 —— 执行失败不再谎报成功 + 「上次指令」让"点了没反应"可见(1.3.2)
背景:用户报「下发锁屏等等指令不生效」。先把服务端那条链路单独验了一遍
(模拟客户端:登记 → 下发 → 心跳带回 → 设备列表可见 → 回执 → 清除),**整条是通的**;
真正的问题在两处。

客户端:执行失败会谎报成功
- `spawn` 找不到可执行文件 / 没权限时**不抛异常**,而是在下一个 tick 发一个异步 `error` 事件 ——
  只包 `try/catch` 抓不到,代码一路走到 `return { ok: true }`,回执写着「已下达系统命令」,
  Web 端看起来一切正常而机器纹丝不动
- 现在等一个 200ms 的窗口确认没有立刻报错,失败如实回执(`client-agent.ts` 的 `executeCommand`)

Web 端:点了没生效,界面上什么都不说
- 一条命令被**取消 / 过期**之后就从 `pendingCommand` 里消失,页面留白 ——
  而最常见的两种"没反应"恰恰是「本机没人确认(客户端 60 秒自动按取消)」与「下达时机器离线」
- `GET /clients/devices` 增加 `lastCommand`(最近一条,不论状态);
  「客户端」页的设备表多一列「上次指令」,由 `commandStateText()` 翻成一句人话
  (已执行 / 本机用户取消 / 已过期 —— 下达时机器不在线 / 待执行)
- 下发成功的提示补上「60 秒内没人点确认就按取消处理」

文档
- AGENTS.md §5 第 69 条记下这两条,并写明排查同类反馈的顺序:**先看那台机器的客户端版本是否 ≥ 1.3.0**
  (远控命令的处理 `client-agent.ts` 是 1.3.0 才有的,旧客户端连心跳都不发)
- docs/reference.md 4.15 的表格补上「二次确认」的准确口径与新增的「上次指令」列

验收:`lint` / `typecheck` / `check:icons` / `docs:check` 全绿;
后端端到端 **247/247**、联动链路 **44/44**、插件静态契约 **76/76**、
Web 真实点击 **34/34**、客户端冒烟 **90/90**;
远控链路另用模拟客户端跑通,并确认新增的「上次指令」在待执行与已回执两种状态下都显示正确。
2026-10-11 17:00:11 +08:00

77 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 系统要求
description: ClassHelper 服务端、Web 管理端、桌面客户端的运行环境与网络要求。
---
# 系统要求
## 服务端
服务端的安装包**自带 Node 运行时**,目标机器不需要另外装 Node.js,也不需要数据库软件
(默认用内嵌的 SQLite)。
| 项目 | 要求 |
| -------- | --------------------------------------------------------------------------- |
| 操作系统 | Windows 10 / 11 / Server 2016+(x64);Linux(glibc 2.28+,见下);Docker |
| 内存 | 512 MB 起步,2 GB 以上更稳(Node + SQLite 常驻约 120–200 MB) |
| 磁盘 | 程序约 340 MB(免安装目录)/ 安装后约 400 MB;数据按班级量增长,通常几十 MB |
| CPU | 任意 x64;不需要独显 |
**Linux 的 glibc 要求**:内置的 Node 官方 linux-x64 构建要求 glibc ≥ 2.28。
CentOS 7 是 2.17,一键安装器会检测并自动换成 `-glibc-217` 变体(尽力而为,未做长期验证)。
判据:
```bash
ldd --version | head -1
```
**外网**:服务端只在「检查更新」时访问 GitHub,且失败是设计内的结果(返回"查不到",不报错)。
内网机器可以完全不连通外网。
## Web 管理端
不需要安装,用浏览器打开服务端地址即可。
| 项目 | 要求 |
| -------- | --------------------------------------------------------------------------- |
| 浏览器 | Chrome / Edge 100+、Firefox 100+、Safari 15+(要支持 CSS 容器查询) |
| 屏幕 | 桌面 1280×720 以上;手机(≤768px)有一套独立的抽屉式布局,同样可用 |
| 安装 PWA | 手机 / 桌面 Chrome 里「添加到主屏幕」可当 App 用(需要 HTTPS 或 localhost) |
## 桌面客户端(ClassHelper 班级端 / 教室机器)
| 项目 | 要求 |
| -------- | ---------------------------------------------------------------------------- |
| 操作系统 | Windows 10 / 11(x64) |
| 内存 | 4 GB 以上(Electron 常驻约 250–400 MB) |
| 磁盘 | 安装后约 330 MB |
| 显卡 | 有 D3D11 即可;希沃一体机、老显卡、虚拟机都做过兼容(没有裁剪 GPU 回退组件) |
| 触摸屏 | 支持,会自动进入[触摸模式](../app/island.md)(希沃白板等) |
> 客户端**只有 Windows 版**。Linux / macOS 上目前只能用 Web 管理端。
## 网络
三端的通信都指向服务端的 **HTTP 端口(默认 4000)**,其中:
- REST 接口:`/api/*`
- 实时推送(Socket.IO):`/socket.io/`
- Web 管理端静态资源:`/`(由服务端托管)
| 场景 | 要做什么 |
| ------------------------- | --------------------------------------------------------------------------------------- |
| 只在服务器本机用 | 什么都不用做,`http://127.0.0.1:4000` |
| 教室机器 / 老师电脑也要用 | 客户端与管理端填服务器的**局域网 IP**(如 `http://192.168.1.10:4000`),防火墙放行 4000 |
| 公网访问 | 前面加 Nginx / Caddy 反代并启用 HTTPS,见[生产部署指南](../management/production.md) |
> **别用代理**。自测时用 `curl.exe --noproxy '*'`,PowerShell 用 `-NoProxy`;
> 教室机器上如果开了系统代理,填服务端地址后可能拿到代理返回的 404。插件里对本地 / 内网地址做了强制直连,
> 但浏览器与客户端本身不会绕过。
## 卸载 / 重置
- 服务端:开始菜单 → 卸载。卸载会保留数据库(`data` 目录改名为 `data.backup`)。
- 客户端:从托盘退出后卸载;重置配置删 `%APPDATA%\class-helper`(或客户端「关于」页显示的数据目录)。
下一步:[安装服务端](server.md)。