EverDefault 会守住你选择的默认程序和系统设置。一旦被其他软件改动,它会自动改回来。
A Windows registry guard that locks in your choices and reverts unwanted changes automatically.
安装后跟着向导勾几下就能用,不需要了解注册表、ProgId 或哈希算法。
- 到 Releases 下载
EverDefault-Setup-<版本>.exe并运行。 - 首次启动会出现向导:
- 勾选想保护的项目(默认浏览器、邮件、PDF、图片、视频……)。
- 点击「开始保护」即可。
- 以后其他程序想改掉这些默认设置时,EverDefault 会自动改回,并在托盘弹出提示。
只想临时试一下:双击
dist\EverDefault.App.exe,未安装服务时会以用户模式运行,无需管理员权限。
| 模块 | 说明 |
|---|---|
| 默认应用守护 | 锁定文件类型(.pdf、.png 等)和链接类型(http、https、mailto)的默认程序。会自动重算并回写 Win10/11 的 UserChoice 哈希。 |
| 整理此电脑 | 扫描「此电脑」和桌面上多出来的图标,勾选后一键移除。 |
| 系统设置保护 | 锁定显示文件扩展名、隐藏文件、最近使用记录、自动播放等常用设置。 |
| 高级规则 | 需要精确控制时,可编辑任意注册表键/值,支持还原、删除、仅记录、写策略。 |
其他特性:
- 基础配置 / 高级配置双 Tab:基础配置只提供搜索、勾选和图形化预览;高级配置才出现原始字段。
- 一键接管当前默认:读取你现在使用的默认程序,按应用聚合,勾选即可保护,不会改变现状。
- 托盘通知:拦截时显示「检测到修改,已改回」,点击可直接调整对应规则;通知可完全关闭。
- 暂停保护:支持全局暂停 1 小时和单项暂停 1 小时,到点自动恢复。
- 活动记录:用普通语言记录每一次拦截,可展开查看原始注册表详情。
- 亮色 / 暗色主题、开机自启、开机后隐藏到托盘、版本更新检查。
- 导入 / 导出可读 JSON 备份(高级模式)。
- 主页:当前保护状态、暂停/恢复、统计、推荐保护和最近活动。
- 我的保护:按应用聚合的保护项,每项一个开关,可调整、暂停或停止;支持搜索、状态筛选和全部暂停/恢复。
- 活动:按「全部 / 已拦截 / 需要处理」筛选,支持搜索和清空记录,可展开原始详情。
- 设置:常规设置;服务模式、用户范围、日志保留等收在「高级选项」里。
- 高级规则:在 设置 → 高级选项 中打开「显示高级选项」后出现。
- 操作系统:Windows 10 / 11(Win7 / Win8 仅支持部分功能)。
- 运行时:.NET Framework 4.8。Win10 1903+ / Win11 通常已自带。
- 权限:用户模式无需管理员;安装系统服务(守护系统级设置与所有用户)需要管理员权限。
- 磁盘:程序数据位于
%ProgramData%\EverDefault。
基础设置:
- 启用保护:总开关。
- 随系统启动:登录后自动启动托盘程序。
- 开机后隐藏到托盘。
- 拦截时用气泡通知我:关闭后完全静默,但仍会在后台保护并记录。
- 主题:亮色 / 暗色 / 跟随系统。
- 检查版本更新:按天 / 周 / 月,也可以点「立即检查更新」。
- 备份与数据:备份 / 恢复保护规则、打开数据目录、清空活动记录。
高级选项:
- 显示高级选项:打开后出现原始规则页。
- 运行模式:用户模式 / 服务模式,支持安装、重启、卸载服务。
- 系统版本覆盖、日志保留天数、目标用户范围。
- 拦截时托盘会弹出气泡,例如:
检测到「.pdf 默认程序」被修改,已改回 Acrobat。 - 点击气泡会打开对应规则,可直接换应用、暂停或停止保护。
- 托盘右键可以「暂停保护 1 小时」;再次点击即可恢复。
- 在 Windows 专注助手开启或系统通知被关闭时,气泡可能不显示;活动页仍会记录。
本工具会「监控并回写注册表」,这类行为容易被杀软误报为可疑。请将以下文件 / 目录加入白名单:
EverDefault.Service.exeEverDefault.App.exe%ProgramData%\EverDefault
在 设置 → 备份与数据 中,或高级模式的工具栏,提供:
- 备份:把当前全部规则保存为 JSON,格式为
{Version, ExportedUtc, Rules:[...]}。 - 恢复:从 JSON 追加导入(自动分配新 ID,不覆盖已有规则)。
参考样例:packaging/sample-rules.json。
所有数据位于 %ProgramData%\EverDefault(服务与托盘共享):
rules.json 规则
baselines.json 基线
changelog.json 变更日志
settings.json 设置
卸载时安装程序会询问是否一并删除该目录。
想换默认程序,但被改回去了? 这是保护在生效。先到托盘右键「暂停保护 1 小时」,或在「我的保护」里暂停/调整对应项目,再改默认程序。改完后恢复保护即可。
改了注册表,活动里却没有记录?
确认「设置 → 启用保护」已开启;高级规则如果使用 Manual 模式不会自动触发。
默认应用设置后又被系统改回去了?
EverDefault 会持续回写,但某些系统更新会重置 UserChoice。若长期无效,通常是 Win11 新版本更换了哈希算法,请附系统版本反馈。
用户模式下能守护系统级设置吗? 不能。守护系统级设置或所有用户,需要在 设置 → 高级选项 → 运行模式 中安装服务模式。
通知太吵 / 不想看到气泡? 设置里关闭「拦截时用气泡通知我」即可,后台仍会正常保护并记录。
数据存在哪里?如何备份?
见数据目录,直接复制 %ProgramData%\EverDefault 即可。
杀软报警或文件被删除? 见杀毒软件提示,将相关文件 / 目录加入白名单。
UserChoice哈希算法在 Win10 / Win11 验证通过;Win7 / Win8 走传统关联路径。Win11 某些新版本可能改用另一套算法,若无效请反馈。- 仅处理已加载的用户配置单元(已注销用户不处理)。
- 服务在需要接管受保护键时,会把键的属主改为
SYSTEM(已为用户补回完全控制)。 - 通知只提示「检测到修改」以及被改成哪个应用,不显示具体是哪个进程写入的:注册表变更通知本身不携带进程信息。
OpenWithProgids项以REG_SZ空值写入,功能可用,但类型与系统不完全一致。
各版本的新增与修复见 CHANGELOG.md,每条发布说明的完整原文见 Releases。
src/
EverDefault.Core/ 模型、枚举、规则/设置定义、存储接口、规则冲突检测
EverDefault.Registry/ 注册表访问、快照、UserChoice 哈希、当前关联读取、命名空间扫描
EverDefault.Persistence/ JSON 存储实现(规则 / 基线 / 日志 / 设置)
EverDefault.Serialization/ 共享 JSON 序列化配置(字典类型名、白名单绑定器)
EverDefault.Ipc/ 命名管道协议、分帧、序列化、规则编解码、管道安全
EverDefault.Service/ 监控引擎宿主、调度器、各规则模块处理器
EverDefault.App/ WPF 托盘界面(主页 / 我的保护 / 活动 / 设置 / 高级规则)
poc/
EverDefault.Poc.UserChoice/ UserChoice 哈希算法验证程序
installer/ Inno Setup 安装脚本
packaging/ 随发行包一起分发的脚本、说明与样例规则
- .NET Framework 4.8(
net48),C# 7.3 - WPF + Windows Forms(托盘)
- Newtonsoft.Json(随发行包提供)
- 命名管道 IPC,Windows 注册表更改通知(
RegNotifyChangeKeyValue)
需要 .NET SDK(用于 net48 目标的 Microsoft.NETFramework.ReferenceAssemblies)。
REM 构建整个解决方案
dotnet build EverDefault.slnx -c Release
REM 构建并刷新 dist\ 目录(生成发布包)
build-dist.cmd
REM 构建并编译 Inno Setup 安装包(需要 Inno Setup 6)
build-installer.cmd
build-dist.cmd会把文件复制到dist\。若提示文件被占用,请先退出托盘程序并停止服务。
EverDefault.Service.exe 支持以下调试参数:
| 参数 | 说明 |
|---|---|
--console |
以控制台模式运行(前台,Ctrl+C 停止)。 |
--ping |
通过命名管道查询服务状态。 |
--users |
列出当前用户范围解析到的 SID 与展开路径。 |
--saverule |
通过 IPC 创建一条测试规则并读回。 |
--getlog |
读取最近 50 条变更日志。 |
--import <rules.json> |
通过 IPC 批量导入规则文件。 |
