BetterGI 进程守护程序。
仓库地址: https://github.com/bcmdy/BGIguard
- 自动监控
BetterGI.exe进程运行状态。 - 进程退出时自动重启,启动方式保留
cmd /c start,并过滤启动参数中的高风险 cmd 字符。 - 多种重启触发共用 60 秒冷却保护,避免异常持续时频繁重启 BetterGI。
- 监控系统内存占用,超过阈值时重启 BetterGI。
- 监控 BetterGI 进程独占内存,超过阈值时重启 BetterGI。
- 检测
YuanShen.exe/GenshinImpact.exe游戏进程。 - 按当前用户 SID 隔离进程检查和终止,避免影响其他用户。
- 单实例保护,防止重复运行守护进程。
- JSON 配置文件支持运行时热加载。
- 日志按日滚动,并自动清理旧日志。
- 支持 Ctrl+C 优雅退出守护循环。
直接运行:
BGIguard.exe首次运行时会提示设置 BetterGI.exe 路径。
BGIguard.exe set path <路径> # 设置 BetterGI.exe 路径
BGIguard.exe set memory <值> # 设置系统内存阈值 (1-100)
BGIguard.exe set memlimit <值> # 设置进程内存阈值 MB (0=禁用)
BGIguard.exe set interval <值> # 设置监控间隔 (秒)
BGIguard.exe set count <值> # 设置丢失计数阈值 (1-10)
BGIguard.exe set skip # 切换是否跳过设置界面
BGIguard.exe set show # 显示当前配置
BGIguard.exe reset # 重置配置
BGIguard.exe help # 显示帮助| 配置项 | 默认值 | 范围 | 说明 |
|---|---|---|---|
| 系统内存阈值 | 85% | 1-100% | 系统内存占用超过阈值时重启 BetterGI |
| 进程内存阈值 | 4096MB | >=0 MB | BetterGI 独占内存阈值,0 表示禁用 |
| 监控间隔 | 5 秒 | >0 秒 | 守护循环检测间隔 |
| 丢失计数阈值 | 6 次 | 1-10 次 | 连续检测到进程丢失多少次后触发重启 |
| 跳过设置 | false | true/false | 是否跳过启动时设置菜单 |
配置文件保存为程序同目录下的 BGIguard_config.json:
{
"Version": 1,
"BetterGiPath": "D:\\Games\\BetterGI\\BetterGI.exe",
"MemoryPercent": 85,
"MonitorInterval": 5,
"MissingCount": 6,
"SkipSetup": false,
"BetterGiMemoryLimitMB": 4096
}程序会检测配置文件更新时间,运行中手动修改配置后会在后续监控循环中生效。Version 是配置文件格式版本,旧配置缺少该字段时仍可正常读取,后续保存时会自动写入。
日志保存在程序同目录,文件名格式:
BGI_guardYYYYMMDD.log
默认保留最近 7 个日志文件。请避免把程序放在 Program Files 等普通用户无写入权限的目录中,否则日志和配置文件可能写入失败。
| 文件 | 作用 |
|---|---|
src/BGIguard/Program.cs |
程序入口,负责初始化运行目录、标题、顶层命令分发和启动编排。 |
src/BGIguard/GuardLoopService.cs |
组装并运行 GuardRunner,把运行时服务、配置快照、内存读取和重启回调接到守护循环。 |
src/BGIguard/BetterGiRuntimeService.cs |
管理 BetterGI 运行时行为,包括单实例保护、启动、命令缓存、进程快照、游戏进程查询和重启适配。 |
src/BGIguard/RuntimeConfigProvider.cs |
负责运行时配置快照、BetterGI 路径解析和 GuardRunnerConfig 生成。 |
src/BGIguard/ConsoleUiService.cs |
负责控制台 UI,包括帮助文本、配置展示、设置菜单、配置重置和 BetterGI 路径输入交互。 |
| 文件 | 作用 |
|---|---|
src/BGIguard/ProcessService.cs |
封装进程枚举、进程归属识别、进程终止、启动、命令行读取和 BetterGI 快照。 |
src/BGIguard/ConfigService.cs |
读取、规范化、缓存和保存 BGIguard_config.json。 |
src/BGIguard/PathService.cs |
验证可执行文件路径,并解析 BetterGI 的本地或配置路径。 |
src/BGIguard/MemoryMonitor.cs |
读取系统内存、物理内存和虚拟内存占用。 |
src/BGIguard/CurrentUserService.cs |
读取当前用户 SID 和显示名,用于多用户进程隔离。 |
src/BGIguard/AppLogger.cs |
当前日志实现,负责写入日志、控制台输出和旧日志清理。 |
src/BGIguard/ProcessOperations.cs |
定义进程操作薄边界,并把 Windows 进程 API 调用适配到 ProcessService。 |
| 文件 | 作用 |
|---|---|
src/BGIguard/CommandLine.cs |
从完整进程命令行中提取 BetterGI 启动参数。 |
src/BGIguard/CommandLineArguments.cs |
清理启动参数,并过滤 cmd 高风险字符。 |
src/BGIguard/CommandLineConfigService.cs |
实现 set path/memory/interval/count/memlimit/skip 等配置修改规则。 |
| 文件 | 作用 |
|---|---|
src/BGIguard/GuardRunner.cs |
守护循环主体,负责每轮检测、状态日志、计数状态和触发重启。 |
src/BGIguard/GuardDecision.cs |
纯判断逻辑,便于单元测试重启条件。 |
| 文件 | 作用 |
|---|---|
src/BGIguard/BGIguard.csproj |
主程序项目文件,定义目标框架、版本、图标和清单。 |
BGIguard.sln |
Visual Studio / dotnet 解决方案文件。 |
src/BGIguard/app.manifest |
Windows 应用清单。 |
src/BGIguard/Assets/icon.ico |
应用图标。 |
build.ps1 |
发布脚本,支持版本号、自包含发布、运行时参数和发布产物自检。 |
clean.ps1 |
清理脚本。 |
global.json |
固定或约束 .NET SDK 版本。 |
CHANGELOG.md |
版本变更记录。 |
SPEC.md |
功能规格说明。 |
| 文件 | 作用 |
|---|---|
tests/BGIguard.Tests/BGIguard.Tests.csproj |
测试项目文件。 |
tests/BGIguard.Tests/AppLoggerTests.cs |
日志写入、UTF-8 内容、旧日志清理和异常目录测试。 |
tests/BGIguard.Tests/BetterGiRuntimeServiceTests.cs |
BetterGI 运行时启动缓存和重启流程测试。 |
tests/BGIguard.Tests/ConfigServiceTests.cs |
配置默认值、保存和读取测试。 |
tests/BGIguard.Tests/PathServiceTests.cs |
路径验证和 BetterGI 路径解析测试。 |
tests/BGIguard.Tests/CommandLineArgumentsTests.cs |
启动参数清理和过滤测试。 |
tests/BGIguard.Tests/CommandLineConfigServiceTests.cs |
命令行配置修改规则测试。 |
tests/BGIguard.Tests/GuardDecisionTests.cs |
守护判断逻辑测试。 |
tests/BGIguard.Tests/GuardRunnerTests.cs |
守护循环单轮执行和关键分支测试。 |
tests/BGIguard.Tests/ProcessServiceTests.cs |
进程启动参数拼接和用户匹配测试。 |
tests/BGIguard.Tests/RuntimeConfigProviderTests.cs |
运行时配置热加载测试。 |
tests/BGIguard.Tests/GlobalUsings.cs |
测试项目全局 using。 |
需要 .NET 8 SDK。
dotnet build BGIguard.sln -c Release
dotnet test BGIguard.sln -c Release --no-build发布:
.\build.ps1 -Version 5.0.0发布脚本会执行构建、测试、发布、ZIP 打包和产物自检。由于程序清单要求管理员权限,help 烟雾测试只会在管理员 PowerShell 中执行;非管理员环境会跳过该烟雾测试,但仍会检查 exe、文档、ZIP 内容,并确保配置文件和日志不会进入发布包。
自包含发布:
.\build.ps1 -Version 5.0.0 -SelfContained -Runtime win-x64如需跳过发布产物自检:
.\build.ps1 -Version 5.0.0 -SkipSelfCheck