# TimeGuard **Repository Path**: suwei1202/time-guard ## Basic Information - **Project Name**: TimeGuard - **Description**: Protect your system time from tampering — auto-restore from NTP servers - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-25 - **Last Updated**: 2026-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TimeGuard - Windows时间守护程序 防止其他应用修改系统时间,检测到篡改后立即从NTP服务器恢复。 ## 功能特性 - 实时监控系统时间变化 - 检测到篡改后立即从NTP服务器恢复 - 支持系统托盘最小化运行 - 可选择开机自动启动 - 需要管理员权限运行 ## 系统要求 ### 运行环境 - Windows 10 或 Windows 11 - 64位系统 - .NET 8 运行时(如未使用独立发布) - **管理员权限**:程序需要管理员权限才能修改系统时间 ### 编译环境 - [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) - **必须** - [WiX Toolset 4.0+](http://wixtoolset.org/) - 构建 MSI 安装程序时需要 - 可通过 `dotnet tool install --global wix --version 4.0.2` 安装 - [WiX UI Extension](https://www.nuget.org/packages/WixToolset.UI.wixext) - 构建 MSI 时需要 - 可通过 `wix extension add --global WixToolset.UI.wixext/4.0.2` 安装 - Windows 10/11 操作系统 ## 编译说明 ### 环境要求 1. 安装 [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) 2. (可选)安装 WiX Toolset 用于构建 MSI 安装程序: - 安装 WiX: `dotnet tool install --global wix --version 4.0.2` - 安装 UI 扩展: `wix extension add --global WixToolset.UI.wixext/4.0.2` 3. Windows 10/11 操作系统 ### 编译步骤 ```bash # 进入项目目录 cd TimeGuard # 编译调试版本 dotnet build # 编译发布版本(推荐) dotnet publish -c Release -r win-x64 --self-contained # 输出目录 # bin/Release/net8.0-windows/win-x64/publish/TimeGuard.exe ``` ### 编译为单文件(可选) ```bash dotnet publish -c Release -r win-x64 --self-contained /p:PublishSingleFile=true /p:PublishReadyToRun=true ``` ## 使用方法 1. 双击运行 `TimeGuard.exe` 2. 系统会弹出 UAC 请求管理员权限;确认后即可运行(与清单 `requireAdministrator` 及程序内自提权逻辑一致) 3. 主窗口显示当前系统时间、NTP时间和状态 4. 点击"最小化到托盘"可将程序隐藏到系统托盘 5. 右键点击托盘图标可执行各种操作 ## 配置说明 配置文件位置:`%LOCALAPPDATA%\TimeGuard\config.json` ```json { "NtpServers": ["cn.pool.ntp.org", "ntp.aliyun.com"], "NtpTimeoutMs": 2000, "LocalCheckIntervalSeconds": 60, "NtpCheckIntervalMinutes": 10, "TimeChangeThresholdSeconds": 5, "NtpTimeDifferenceThresholdSeconds": 1, "AutoSyncOnChange": true, "DebugMode": false } ``` ## 文件结构 ``` TimeGuard/ ├── Program.cs # 程序入口 ├── app.manifest # 管理员权限清单 ├── TimeGuard.csproj # 项目文件 ├── Core/ │ ├── TimeMonitor.cs # 时间监控 │ ├── NtpClient.cs # NTP客户端 │ └── TimeSynchronizer.cs # 时间同步 ├── UI/ │ ├── MainForm.cs # 主窗口 │ └── TrayManager.cs # 托盘管理 ├── Utils/ │ └── AutoStartManager.cs # 开机启动 ├── Config/ │ ├── AppSettings.cs # 配置定义 │ └── SettingsManager.cs # 配置管理 └── Properties/ ├── Resources.resx # 资源文件 └── Resources.Designer.cs ``` ## 注意事项 1. 程序必须以管理员权限运行,否则无法修改系统时间 2. 程序使用 `app.manifest` 声明管理员权限;首次启动时通常会弹出 UAC。若未提权(例如从部分开发环境直接启动),程序会尝试通过系统“以管理员身份运行”再次启动自身。 3. 若双击后从未出现 UAC,请确认运行的是带嵌入清单的发布产物(例如 `dotnet publish` 生成的 `TimeGuard.exe`),而非被剥离清单的副本。 4. 同一时间只能运行一个实例 5. NTP同步需要网络连接 ## 同步与网络异常说明 - 点击“立即同步”后,若已有同步任务在运行,会提示“已有同步任务在进行中,请稍后重试”,按钮会自动恢复可点击状态。 - 程序会按服务器列表依次尝试 NTP,同步阶段包含:DNS解析、连接、发送请求、等待响应。 - 每个阶段都使用超时控制(由 `NtpTimeoutMs` 决定),超时后会自动切换到下一个服务器,不会无限等待。 - 若开启调试日志,可看到详细阶段信息,便于判断是否是 VPN 切换、DNS 解析异常或网络策略(如 UDP 123 限制)导致失败。 ## NTP检查与改时的区别 - `NTP主动检查间隔`(默认10分钟)表示“每隔一段时间获取NTP时刻并比较偏差”,不表示每次都会修改系统时间。 - `NtpTimeDifferenceThresholdSeconds` 默认值为 `1` 秒。只有当偏差大于该阈值时,才会执行系统改时同步。 - 偏差不超过阈值时会记录“检查完成、无需改时”,此时“上次NTP检查时间”会更新,但“上次系统改时同步时间”不会变化。 - 主界面会分别展示“上次NTP检查时间”和“上次系统改时同步时间”,用于区分“已检查”与“已改时”。 - 从旧版本升级时,如果检测到历史默认阈值 `10` 秒,程序会自动迁移为 `1` 秒以保持行为一致。 ## License MIT License