Skip to content

Latest commit

 

History

History
85 lines (57 loc) · 6.38 KB

app-guard.md

File metadata and controls

85 lines (57 loc) · 6.38 KB

应用守护

管理员可以在 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 连同它自带的运行时一起被删除,它也能运行。

  1. 插件收到启用的策略后,把 RemoteCI.Guard.exe 复制到 %LOCALAPPDATA%\RemoteCI\Guard,写入守护配置,在当前用户的注册表 HKCU\...\Run 中登记登录自启,并启动它。整个过程不需要管理员权限。
  2. 守护进程每 5 秒检查一次:ClassIsland 是否在运行(安装目录下的任何进程都算,包括启动器和自带更新器)、启动器是否还在。
  3. 插件启动时写入“运行中”标记,ClassIsland 正常退出时写入“正常退出”标记。守护进程据此判断:
    • 有正常退出标记:按“退出自启”的延时启动。
    • 没有正常退出标记:视为意外退出,按“意外退出时重启”处理。
  4. 通过 RemoteCI 远程升级 ClassIsland 时,插件先写入“升级中”标记。之后 15 分钟内守护进程不做干预。
  5. 守护进程登录 Windows 后启动时,如果 1 分钟内 ClassIsland 没有自己启动,并且开启了任一自启项,就由它启动 ClassIsland。
  6. 注销或关机时,守护进程不再启动任何程序。插件每分钟检查一次守护进程,被结束后会重新拉起它。

备份与恢复

备份目录是 %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