管理员可以在 RemoteCI 后台统一开启“应用守护”,让教室电脑上的 ClassIsland 始终保持运行:
-
退出自启:ClassIsland 被正常退出后自动重新启动。可设置延时,例如“退出 40 分钟后自启”;0 表示立即(实际至少等 10 秒,让 ClassIsland 自己的重启先完成)。
-
意外退出时重启:ClassIsland 崩溃或在任务管理器中被结束进程时,5 秒后重新启动。10 分钟内意外退出超过 3 次时,暂停自动重启 10 分钟,并上报“频繁崩溃”事件。
-
禁止删除:定时把 ClassIsland 备份到 C 盘。检测到程序被删除后,从备份恢复、重新启动,然后用 ClassIsland 原生对话框提示:
当前ClassIsland由{组织名}统一管理,请勿自行删除,当前实例已由RemoteCI自动恢复。
其中的组织名在“系统配置 › 组织信息”中设置;不填时显示 RemoteCI。
| 位置 | 内容 |
|---|---|
| WebUI › 管理 › 应用守护 | 全局策略、单台设备的单独设置、最近守护事件 |
| WebUI › 系统配置 › 组织信息 | 恢复提示中的组织名 |
| REST | GET/PUT /api/settings/app-guard、GET/PUT/DELETE /api/devices/{credentialId}/app-guard、GET /api/app-guard/events(仅系统管理员,见协议) |
全局策略对所有教室电脑生效。某台设备单独设置后,它使用自己的完整策略,直到点“恢复沿用全局”。策略保存后立即下发给在线设备;离线设备在下次连接时收到。插件会缓存最近一次收到的策略,断网启动时照样生效。
设备列表中的“插件版本过旧”表示该设备在线,但插件不支持应用守护(没有声明 host.app-guard 能力),需要先升级插件。
ClassIsland 退出或被删除时,插件也随之停止,所以守护工作由一个独立的小程序 RemoteCI.Guard.exe 完成。它随插件包分发,基于 Windows 10/11 自带的 .NET Framework 4.8,因此即使 ClassIsland 连同它自带的运行时一起被删除,它也能运行。
- 插件收到启用的策略后,把
RemoteCI.Guard.exe复制到%LOCALAPPDATA%\RemoteCI\Guard,写入守护配置,在当前用户的注册表HKCU\...\Run中登记登录自启,并启动它。整个过程不需要管理员权限。 - 守护进程每 5 秒检查一次:ClassIsland 是否在运行(安装目录下的任何进程都算,包括启动器和自带更新器)、启动器是否还在。
- 插件启动时写入“运行中”标记,ClassIsland 正常退出时写入“正常退出”标记。守护进程据此判断:
- 有正常退出标记:按“退出自启”的延时启动。
- 没有正常退出标记:视为意外退出,按“意外退出时重启”处理。
- 通过 RemoteCI 远程升级 ClassIsland 时,插件先写入“升级中”标记。之后 15 分钟内守护进程不做干预。
- 守护进程登录 Windows 后启动时,如果 1 分钟内 ClassIsland 没有自己启动,并且开启了任一自启项,就由它启动 ClassIsland。
- 注销或关机时,守护进程不再启动任何程序。插件每分钟检查一次守护进程,被结束后会重新拉起它。
备份目录是 %LOCALAPPDATA%\RemoteCI\Guard\backup,包括:
- ClassIsland 安装目录,含文件夹版的
data目录、插件与配置; - 位于安装目录之外的数据目录,例如
%LOCALAPPDATA%\ClassIsland中的集控与全局设置。
日志、缓存和临时文件不备份。
何时备份:仅在 ClassIsland 运行时,按设置的间隔(默认 24 小时)增量备份,只复制有变化的文件;ClassIsland 版本变化后立即备份一次。以下情况跳过本次备份,并上报“备份失败”:
- 需要备份的文件超过 2 GB;
- 安装目录比上次备份少了 30% 以上的文件(疑似正在被删除)。
如何判断被删除:启动器(文件夹版为安装目录下的 ClassIsland.exe)或安装目录缺失,10 秒后复查仍缺失。
如何恢复:只补回缺失的文件,不覆盖仍存在的文件,也不删除多出来的文件。恢复后先留下提示,再启动 ClassIsland;新实例中的插件读到提示后弹出原生对话框。恢复失败时上报“恢复失败”,5 分钟后再试。
守护事件包括:已自动恢复、恢复失败、意外退出后重启、退出后自启、频繁崩溃暂停重启、备份完成(首次或版本变化后)、备份失败。
- 事件先记录在守护目录,插件连上服务端后上报,显示在“应用守护”页并保留 90 天。
- “已自动恢复”和“恢复失败”还会通知全部系统管理员,个人通知种类为
app_guard。
全局或单台设备关闭守护后,插件会结束守护进程、删除登录自启项,并删除整个 %LOCALAPPDATA%\RemoteCI\Guard(包括备份)。
- 守护进程以当前 Windows 用户身份运行,用来防止误操作和普通使用者随手关闭或删除,不是防篡改机制。有管理员权限、或熟悉系统的人仍然可以同时结束守护进程、删除登录自启项和备份。
- MSIX(应用商店)安装的 ClassIsland 位于系统保护目录,不支持“禁止删除”。其余两项照常生效,并会上报一次说明。
- 只守护当前登录用户的 ClassIsland。多个 Windows 账号需要各自登录过一次 ClassIsland,插件才会为该账号部署守护进程。
- 守护目录在
%LOCALAPPDATA%中。如果整个用户配置文件被删除,备份也会一起丢失。
| 文件 | 写入方 | 用途 |
|---|---|---|
RemoteCI.Guard.exe |
插件 | 守护进程 |
policy.json |
插件 | 生效策略、启动路径、安装目录、备份范围、ClassIsland 版本 |
state.json |
插件 | ClassIsland 的进程号与 running / exiting / updating 标记 |
guard-status.json |
守护进程 | 心跳、最近备份时间与大小、最近错误(插件设置页显示) |
pending-notice.json |
守护进程 | 恢复后待显示的提示,插件显示后删除 |
events.jsonl |
守护进程 | 待上报的守护事件 |
guard.log |
守护进程 | 日志,超过 1 MB 时轮换为 guard.log.1 |
backup\ |
守护进程 | 备份副本与 manifest.json |